From cc5203176b5e140700193574f22716d1bd1e0c6c Mon Sep 17 00:00:00 2001 From: Weidong Xu Date: Fri, 23 Oct 2020 15:55:53 +0800 Subject: [PATCH 01/24] remove .implementation from sdkName (#16674) --- .../resources/fluentcore/AzureServiceClient.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/AzureServiceClient.java b/sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/AzureServiceClient.java index 48a1a772f2db..b9687f8d558b 100644 --- a/sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/AzureServiceClient.java +++ b/sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/AzureServiceClient.java @@ -54,10 +54,15 @@ public abstract class AzureServiceClient { protected AzureServiceClient(HttpPipeline httpPipeline, SerializerAdapter serializerAdapter, AzureEnvironment environment) { - sdkName = this.getClass().getPackage().getName(); - this.httpPipeline = httpPipeline; this.serializerAdapter = serializerAdapter; + + String packageName = this.getClass().getPackage().getName(); + String implementationSegment = ".implementation"; + if (packageName.endsWith(implementationSegment)) { + packageName = packageName.substring(0, packageName.length() - implementationSegment.length()); + } + this.sdkName = packageName; } /** From 965b27291fe1b4ed2d042b1055ff8eaa102df875 Mon Sep 17 00:00:00 2001 From: Tanyi Chen Date: Fri, 23 Oct 2020 16:52:33 +0800 Subject: [PATCH 02/24] use standard ssl rather than wildcard (#16735) * use standard ssl rather than wildcard * use self-signed cert * fix compile * fix compile error --- .../appplatform/SpringCloudLiveOnlyTest.java | 168 +++++++++++++++--- .../samples/ManageSpringCloud.java | 59 +++--- .../ManageFunctionAppWithDomainSsl.java | 2 +- .../ManageLinuxWebAppWithDomainSsl.java | 2 +- .../samples/ManageWebAppWithDomainSsl.java | 2 +- .../azure/resourcemanager/samples/Utils.java | 12 +- 6 files changed, 196 insertions(+), 49 deletions(-) diff --git a/sdk/resourcemanager/azure-resourcemanager-appplatform/src/test/java/com/azure/resourcemanager/appplatform/SpringCloudLiveOnlyTest.java b/sdk/resourcemanager/azure-resourcemanager-appplatform/src/test/java/com/azure/resourcemanager/appplatform/SpringCloudLiveOnlyTest.java index e600066f9633..1d6af96dad10 100644 --- a/sdk/resourcemanager/azure-resourcemanager-appplatform/src/test/java/com/azure/resourcemanager/appplatform/SpringCloudLiveOnlyTest.java +++ b/sdk/resourcemanager/azure-resourcemanager-appplatform/src/test/java/com/azure/resourcemanager/appplatform/SpringCloudLiveOnlyTest.java @@ -3,21 +3,19 @@ package com.azure.resourcemanager.appplatform; +import com.azure.core.management.Region; import com.azure.core.test.annotation.DoNotRecord; import com.azure.resourcemanager.appplatform.models.RuntimeVersion; import com.azure.resourcemanager.appplatform.models.SpringApp; import com.azure.resourcemanager.appplatform.models.SpringAppDeployment; import com.azure.resourcemanager.appplatform.models.SpringService; -import com.azure.resourcemanager.appservice.models.AppServiceCertificateOrder; import com.azure.resourcemanager.appservice.models.AppServiceDomain; import com.azure.resourcemanager.dns.models.DnsZone; import com.azure.resourcemanager.keyvault.models.CertificatePermissions; -import com.azure.resourcemanager.keyvault.models.Secret; import com.azure.resourcemanager.keyvault.models.SecretPermissions; import com.azure.resourcemanager.keyvault.models.Vault; import com.azure.resourcemanager.resources.fluentcore.arm.CountryIsoCode; import com.azure.resourcemanager.resources.fluentcore.arm.CountryPhoneCode; -import com.azure.core.management.Region; import com.azure.security.keyvault.certificates.CertificateClient; import com.azure.security.keyvault.certificates.CertificateClientBuilder; import com.azure.security.keyvault.certificates.models.ImportCertificateOptions; @@ -28,19 +26,33 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; import javax.xml.bind.DatatypeConverter; +import java.io.BufferedReader; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.security.KeyManagementException; import java.security.KeyStore; import java.security.MessageDigest; -import java.util.Base64; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; +import java.util.List; public class SpringCloudLiveOnlyTest extends AppPlatformTest { private static final String PIGGYMETRICS_CONFIG_URL = "https://github.com/Azure-Samples/piggymetrics-config"; @@ -150,6 +162,14 @@ public void canCreateCustomDomainWithSsl() throws Exception { String appName = "gateway"; Region region = Region.US_EAST; + allowAllSSL(); + String cerPassword = password(); + String cerPath = this.getClass().getResource("/").getPath() + domainName + ".cer"; + String pfxPath = this.getClass().getResource("/").getPath() + domainName + ".pfx"; + createCertificate(cerPath, pfxPath, domainName, cerPassword, "ssl." + domainName, "ssl." + domainName); + + byte[] certificate = readAllBytes(new FileInputStream(pfxPath)); + appPlatformManager.resourceManager().resourceGroups().define(rgName) .withRegion(region) .create(); @@ -178,17 +198,9 @@ public void canCreateCustomDomainWithSsl() throws Exception { .withExistingDnsZone(dnsZone) .create(); - AppServiceCertificateOrder certificateOrder = appServiceManager.certificateOrders().define(certOrderName) + Vault vault = keyVaultManager.vaults().define(vaultName) + .withRegion(region) .withExistingResourceGroup(rgName) - .withHostName(String.format("*.%s", domainName)) - .withWildcardSku() - .withDomainVerification(domain) - .withNewKeyVault(vaultName, region) - .withAutoRenew(true) - .create(); - - Vault vault = keyVaultManager.vaults().getByResourceGroup(rgName, vaultName); - vault.update() .defineAccessPolicy() .forServicePrincipal(clientIdFromFile()) .allowSecretAllPermissions() @@ -199,11 +211,7 @@ public void canCreateCustomDomainWithSsl() throws Exception { .allowCertificatePermissions(CertificatePermissions.GET, CertificatePermissions.LIST) .allowSecretPermissions(SecretPermissions.GET, SecretPermissions.LIST) .attach() - .apply(); - - Secret secret = vault.secrets().getByName(certOrderName); - - byte[] certificate = Base64.getDecoder().decode(secret.getValue()); + .create(); // upload certificate CertificateClient certificateClient = new CertificateClientBuilder() @@ -213,12 +221,13 @@ public void canCreateCustomDomainWithSsl() throws Exception { certificateClient.importCertificate( new ImportCertificateOptions(certName, certificate) + .setPassword(cerPassword) .setEnabled(true) ); // get thumbprint KeyStore store = KeyStore.getInstance("PKCS12"); - store.load(new ByteArrayInputStream(certificate), null); + store.load(new ByteArrayInputStream(certificate), cerPassword.toCharArray()); String alias = Collections.list(store.aliases()).get(0); String thumbprint = DatatypeConverter.printHexBinary(MessageDigest.getInstance("SHA-1").digest(store.getCertificate(alias).getEncoded())); @@ -275,4 +284,123 @@ private void extraTarGzSource(File folder, URL url) throws IOException { connection.disconnect(); } } + + private byte[] readAllBytes(InputStream inputStream) throws IOException { + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + byte[] data = new byte[4096]; + while (true) { + int size = inputStream.read(data); + if (size > 0) { + outputStream.write(data, 0, size); + } else { + return outputStream.toByteArray(); + } + } + } + } + + public static void createCertificate(String certPath, String pfxPath, + String alias, String password, String cnName, String dnsName) throws IOException { + if (new File(pfxPath).exists()) { + return; + } + String validityInDays = "3650"; + String keyAlg = "RSA"; + String sigAlg = "SHA1withRSA"; + String keySize = "2048"; + String storeType = "pkcs12"; + String command = "keytool"; + String jdkPath = System.getProperty("java.home"); + if (jdkPath != null && !jdkPath.isEmpty()) { + jdkPath = jdkPath.concat("\\bin"); + if (new File(jdkPath).isDirectory()) { + command = String.format("%s%s%s", jdkPath, File.separator, command); + } + } else { + return; + } + + // Create Pfx file + String[] commandArgs = {command, "-genkey", "-alias", alias, + "-keystore", pfxPath, "-storepass", password, "-validity", + validityInDays, "-keyalg", keyAlg, "-sigalg", sigAlg, "-keysize", keySize, + "-storetype", storeType, "-dname", "CN=" + cnName, "-ext", "EKU=1.3.6.1.5.5.7.3.1"}; + if (dnsName != null) { + List args = new ArrayList<>(Arrays.asList(commandArgs)); + args.add("-ext"); + args.add("san=dns:" + dnsName); + commandArgs = args.toArray(new String[0]); + } + cmdInvocation(commandArgs, true); + + // Create cer file i.e. extract public key from pfx + File pfxFile = new File(pfxPath); + if (pfxFile.exists()) { + String[] certCommandArgs = {command, "-export", "-alias", alias, + "-storetype", storeType, "-keystore", pfxPath, + "-storepass", password, "-rfc", "-file", certPath}; + // output of keytool export command is going to error stream + // although command is + // executed successfully, hence ignoring error stream in this case + cmdInvocation(certCommandArgs, true); + + // Check if file got created or not + File cerFile = new File(pfxPath); + if (!cerFile.exists()) { + throw new IOException( + "Error occurred while creating certificate" + + String.join(" ", certCommandArgs)); + } + } else { + throw new IOException("Error occurred while creating certificates" + + String.join(" ", commandArgs)); + } + } + + public static String cmdInvocation(String[] command, + boolean ignoreErrorStream) throws IOException { + String result = ""; + String error = ""; + + Process process = new ProcessBuilder(command).start(); + try ( + InputStream inputStream = process.getInputStream(); + InputStream errorStream = process.getErrorStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + BufferedReader ebr = new BufferedReader(new InputStreamReader(errorStream, StandardCharsets.UTF_8)); + ) { + result = br.readLine(); + process.waitFor(); + error = ebr.readLine(); + if (error != null && (!error.equals(""))) { + // To do - Log error message + + if (!ignoreErrorStream) { + throw new IOException(error, null); + } + } + } catch (Exception e) { + throw new RuntimeException("Exception occurred while invoking command", e); + } + return result; + } + + private static void allowAllSSL() throws NoSuchAlgorithmException, KeyManagementException { + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + public void checkClientTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + } + public void checkServerTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + } + } + }; + SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, trustAllCerts, new SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); + } } diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appplatform/samples/ManageSpringCloud.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appplatform/samples/ManageSpringCloud.java index 4cce0601d20c..5d477cfde58e 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appplatform/samples/ManageSpringCloud.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appplatform/samples/ManageSpringCloud.java @@ -187,19 +187,17 @@ // .withCNameRecordSet("ssl", gateway.fqdn()) // .apply(); // -// System.out.printf("Purchasing a certificate for *.%s and save to %s in key vault named %s ...%n", domainName, certOrderName, vaultName); -// AppServiceCertificateOrder certificateOrder = azureResourceManager.appServiceCertificateOrders().define(certOrderName) -// .withExistingResourceGroup(rgName) -// .withHostName(String.format("*.%s", domainName)) -// .withWildcardSku() -// .withDomainVerification(domain) -// .withNewKeyVault(vaultName, region) -// .withAutoRenew(true) -// .create(); -// System.out.printf("Purchased certificate: *.%s ...%n", domain.name()); -// Utils.print(certificateOrder); +// // Please use a trusted certificate for actual use +// System.out.printf("Generate a self-signed certificate for ssl.%s %n", domainName); +// allowAllSSL(); +// String cerPassword = password(); +// String cerPath = ManageSpringCloud.class.getResource("/").getPath() + domainName + ".cer"; +// String pfxPath = ManageSpringCloud.class.getClass().getResource("/").getPath() + domainName + ".pfx"; +// createCertificate(cerPath, pfxPath, domainName, cerPassword, "ssl." + domainName, "ssl." + domainName); +// +// byte[] certificate = readAllBytes(new FileInputStream(pfxPath)); // -// System.out.printf("Updating key vault %s with access from %s, %s%n", vaultName, clientId, SPRING_CLOUD_SERVICE_PRINCIPAL); +// System.out.printf("Creating key vault %s with access from %s, %s%n", vaultName, clientId, SPRING_CLOUD_SERVICE_PRINCIPAL); // Vault vault = azureResourceManager.vaults().getByResourceGroup(rgName, vaultName); // vault.update() // .defineAccessPolicy() @@ -213,20 +211,13 @@ // .allowSecretPermissions(SecretPermissions.GET, SecretPermissions.LIST) // .attach() // .apply(); -// System.out.printf("Updated key vault %s%n", vault.name()); +// System.out.printf("Created key vault %s%n", vault.name()); // Utils.print(vault); // -// Secret secret = vault.secrets().getByName(certOrderName); -// -// byte[] certificate = Base64.getDecoder().decode(secret.getValue()); -// -// String thumbprint = secret.tags().get("Thumbprint"); -// if (thumbprint == null || thumbprint.isEmpty()) { -// KeyStore store = KeyStore.getInstance("PKCS12"); -// store.load(new ByteArrayInputStream(certificate), null); -// String alias = Collections.list(store.aliases()).get(0); -// thumbprint = DatatypeConverter.printHexBinary(MessageDigest.getInstance("SHA-1").digest(store.getCertificate(alias).getEncoded())); -// } +// KeyStore store = KeyStore.getInstance("PKCS12"); +// store.load(new ByteArrayInputStream(certificate), cerPassword.toCharArray()); +// String alias = Collections.list(store.aliases()).get(0); +// thumbprint = DatatypeConverter.printHexBinary(MessageDigest.getInstance("SHA-1").digest(store.getCertificate(alias).getEncoded())); // // System.out.printf("Get certificate: %s%n", secret.getValue()); // System.out.printf("Certificate Thumbprint: %s%n", thumbprint); @@ -240,6 +231,7 @@ // System.out.printf("Uploading certificate to %s in key vault ...%n", certName); // certificateClient.importCertificate( // new ImportCertificateOptions(certName, certificate) +// .setPassword(cerPassword) // .setEnabled(true) // ); // @@ -323,4 +315,23 @@ // connection.disconnect(); // } // } +// +// private static void allowAllSSL() throws NoSuchAlgorithmException, KeyManagementException { +// TrustManager[] trustAllCerts = new TrustManager[]{ +// new X509TrustManager() { +// public java.security.cert.X509Certificate[] getAcceptedIssuers() { +// return null; +// } +// public void checkClientTrusted( +// java.security.cert.X509Certificate[] certs, String authType) { +// } +// public void checkServerTrusted( +// java.security.cert.X509Certificate[] certs, String authType) { +// } +// } +// }; +// SSLContext sslContext = SSLContext.getInstance("SSL"); +// sslContext.init(null, trustAllCerts, new SecureRandom()); +// HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); +// } //} diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageFunctionAppWithDomainSsl.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageFunctionAppWithDomainSsl.java index 6dff00bf7722..95b966ac3ea8 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageFunctionAppWithDomainSsl.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageFunctionAppWithDomainSsl.java @@ -120,7 +120,7 @@ public static boolean runSample(AzureResourceManager azureResourceManager) throw System.out.println("Creating a self-signed certificate " + pfxPath + "..."); - Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName); + Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName, null); System.out.println("Created self-signed certificate " + pfxPath); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageLinuxWebAppWithDomainSsl.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageLinuxWebAppWithDomainSsl.java index 5f76377120ac..1b6278ba7d3c 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageLinuxWebAppWithDomainSsl.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageLinuxWebAppWithDomainSsl.java @@ -127,7 +127,7 @@ public static boolean runSample(AzureResourceManager azureResourceManager) throw System.out.println("Creating a self-signed certificate " + pfxPath + "..."); - Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName); + Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName, null); System.out.println("Created self-signed certificate " + pfxPath); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageWebAppWithDomainSsl.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageWebAppWithDomainSsl.java index 6f778547430c..d60972ed3e07 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageWebAppWithDomainSsl.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageWebAppWithDomainSsl.java @@ -124,7 +124,7 @@ public static boolean runSample(AzureResourceManager azureResourceManager) throw System.out.println("Creating a self-signed certificate " + pfxPath + "..."); - Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName); + Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName, null); System.out.println("Created self-signed certificate " + pfxPath); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/samples/Utils.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/samples/Utils.java index f4e3e407c3e7..93a3eb756d96 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/samples/Utils.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/samples/Utils.java @@ -166,6 +166,7 @@ import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; @@ -1589,11 +1590,12 @@ public static String getSecondaryServicePrincipalSecret(String envSecondaryServi * @param alias User alias * @param password alias password * @param cnName domain name + * @param dnsName dns name in subject alternate name * @throws Exception exceptions from the creation * @throws IOException IO Exception */ - public static void createCertificate(String certPath, String pfxPath, - String alias, String password, String cnName) throws IOException { + public static void createCertificate(String certPath, String pfxPath, String alias, + String password, String cnName, String dnsName) throws IOException { if (new File(pfxPath).exists()) { return; } @@ -1618,6 +1620,12 @@ public static void createCertificate(String certPath, String pfxPath, "-keystore", pfxPath, "-storepass", password, "-validity", validityInDays, "-keyalg", keyAlg, "-sigalg", sigAlg, "-keysize", keySize, "-storetype", storeType, "-dname", "CN=" + cnName, "-ext", "EKU=1.3.6.1.5.5.7.3.1"}; + if (dnsName != null) { + List args = new ArrayList<>(Arrays.asList(commandArgs)); + args.add("-ext"); + args.add("san=dns:" + dnsName); + commandArgs = args.toArray(new String[0]); + } Utils.cmdInvocation(commandArgs, true); // Create cer file i.e. extract public key from pfx From a564e075dcc48886478afc34be284c3031d30968 Mon Sep 17 00:00:00 2001 From: Alan Zimmer <48699787+alzimmermsft@users.noreply.github.com> Date: Fri, 23 Oct 2020 08:58:08 -0700 Subject: [PATCH 03/24] Update SPI Error Messages (#16619) * Updated HttpClientProviders error message * Updated JsonSerializerProviders error message * Update links to aka.ms links --- .../core/implementation/http/HttpClientProviders.java | 7 +++++-- .../core/util/serializer/JsonSerializerProviders.java | 8 ++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/implementation/http/HttpClientProviders.java b/sdk/core/azure-core/src/main/java/com/azure/core/implementation/http/HttpClientProviders.java index 96b3d24120c8..fe826da4c305 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/implementation/http/HttpClientProviders.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/implementation/http/HttpClientProviders.java @@ -13,8 +13,11 @@ */ public final class HttpClientProviders { private static HttpClientProvider defaultProvider; - private static final String CANNOT_FIND_HTTP_CLIENT = - "Cannot find any HttpClient provider on the classpath - unable to create a default HttpClient instance"; + private static final String CANNOT_FIND_HTTP_CLIENT = "A request was made to load the default HttpClient provider " + + "but one could not be found on the classpath. If you are using a dependency manager, consider including a " + + "dependency on azure-core-http-netty or azure-core-http-okhttp. Depending on your existing dependencies, you " + + "have the choice of Netty or OkHttp implementations. Additionally, refer to " + + "https://aka.ms/azsdk/java/docs/custom-httpclient to learn about writing your own implementation."; static { ServiceLoader serviceLoader = ServiceLoader.load(HttpClientProvider.class); diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/serializer/JsonSerializerProviders.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/serializer/JsonSerializerProviders.java index f080043d7799..82131dd5b04a 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/serializer/JsonSerializerProviders.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/serializer/JsonSerializerProviders.java @@ -10,8 +10,12 @@ * This class is a proxy for using a {@link JsonSerializerProvider} loaded from the classpath. */ public final class JsonSerializerProviders { - private static final String CANNOT_FIND_JSON_SERIALIZER_PROVIDER = - "Cannot find any JSON serializer provider on the classpath."; + private static final String CANNOT_FIND_JSON_SERIALIZER_PROVIDER = "A request was made to load the default JSON " + + "serializer provider but one could not be found on the classpath. If you are using a dependency manager, " + + "consider including a dependency on azure-core-serializer-json-jackson or azure-core-serializer-json-gson. " + + "Depending on your existing dependencies, you have the choice of Jackson or GSON implementations. " + + "Additionally, refer to https://aka.ms/azsdk/java/docs/custom-jsonserializer to learn about writing your own " + + "implementation."; private static JsonSerializerProvider defaultProvider; private static boolean attemptedLoad; From 6c862f36e332d74ca8458a5e888e93e748aff33c Mon Sep 17 00:00:00 2001 From: Gauri Prasad <51212198+gapra-msft@users.noreply.github.com> Date: Fri, 23 Oct 2020 10:35:56 -0700 Subject: [PATCH 04/24] Removed ability to take a share or share snapshot lease (#16603) --- sdk/storage/azure-storage-file-share/CHANGELOG.md | 3 ++- .../file/share/specialized/ShareLeaseClientBuilder.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sdk/storage/azure-storage-file-share/CHANGELOG.md b/sdk/storage/azure-storage-file-share/CHANGELOG.md index 6b5c3d7f4f0f..5102f303de8d 100644 --- a/sdk/storage/azure-storage-file-share/CHANGELOG.md +++ b/sdk/storage/azure-storage-file-share/CHANGELOG.md @@ -6,13 +6,14 @@ - Added support for getting access tier on a share through ShareClient.getProperties, ShareServiceClient.listShares - Renamed setAccessTier to setProperties and deprecated setQuotaInGb in favor of setProperties. - Renamed DeleteSnapshotsOptionType to ShareSnapshotsDeleteOptionType in ShareClient.delete +- Removed ability to create a ShareLeaseClient for a Share or Share Snapshot. This feature has been rescheduled for future release. ## 12.7.0-beta.1 (2020-10-01) - Added support for the 2020-02-10 service version. - Added support to getFileRanges on a previous snapshot by adding the getFileRangesDiff API. - Added support to set whether or not smb multichannel is enabled. - Added support to lease shares and snapshot shares. -- Added support to specify a lease id for share operations. +- Added support to specify a lease id for share operations. - Fixed a bug where getProperties on a file client would throw a HttpResponseException instead of ShareStorageException. - Fixed a bug where snapshot would be appended to a share snapshot instead of sharesnapshot. - Fixed a bug that would cause auth failures when building a client by passing an endpoint which had a sas token with protocol set to https,http diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/specialized/ShareLeaseClientBuilder.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/specialized/ShareLeaseClientBuilder.java index cce3a5c8954c..1dae3d679e44 100644 --- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/specialized/ShareLeaseClientBuilder.java +++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/specialized/ShareLeaseClientBuilder.java @@ -112,7 +112,7 @@ public ShareLeaseClientBuilder fileAsyncClient(ShareFileAsyncClient fileAsyncCli * @return the updated ShareLeaseClientBuilder object * @throws NullPointerException If {@code fileClient} is {@code null}. */ - public ShareLeaseClientBuilder shareClient(ShareClient shareClient) { + ShareLeaseClientBuilder shareClient(ShareClient shareClient) { Objects.requireNonNull(shareClient); this.pipeline = shareClient.getHttpPipeline(); this.url = shareClient.getShareUrl(); @@ -130,7 +130,7 @@ public ShareLeaseClientBuilder shareClient(ShareClient shareClient) { * @return the updated ShareLeaseClientBuilder object * @throws NullPointerException If {@code fileAsyncClient} is {@code null}. */ - public ShareLeaseClientBuilder shareAsyncClient(ShareAsyncClient shareAsyncClient) { + ShareLeaseClientBuilder shareAsyncClient(ShareAsyncClient shareAsyncClient) { Objects.requireNonNull(shareAsyncClient); this.pipeline = shareAsyncClient.getHttpPipeline(); this.url = shareAsyncClient.getShareUrl(); From bdd011b0334f9c47a82ac4a912a36be5e53cee6b Mon Sep 17 00:00:00 2001 From: Sameeksha Vaity Date: Fri, 23 Oct 2020 10:58:38 -0700 Subject: [PATCH 05/24] Adjust page number for contact names business card field (#16709) --- .../FormRecognizerAsyncClient.java | 12 ++--- .../azure/ai/formrecognizer/Transforms.java | 51 +++++++++++++------ .../FormRecognizerAsyncClientTest.java | 4 +- .../FormRecognizerClientTest.java | 4 +- .../FormRecognizerClientTestBase.java | 19 +++++-- 5 files changed, 59 insertions(+), 31 deletions(-) diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClient.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClient.java index 9a8b6272cb3e..8af6d97957de 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClient.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClient.java @@ -153,7 +153,7 @@ isFieldElementsIncluded, new SourcePath().setSource(formUrl), context) .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm(modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - modelId)) + modelId, false)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -246,7 +246,7 @@ isFieldElementsIncluded, new SourcePath().setSource(formUrl), context) .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm(modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - modelId)) + modelId, false)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -478,7 +478,7 @@ PollerFlux> beginRecognizeContent( .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm(modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - null)) + null, false)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -573,7 +573,7 @@ public PollerFlux> beginReco .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm(modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - null)) + null, false)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -655,7 +655,7 @@ PollerFlux> beginRecognizeBu .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm( modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - null)) + null, true)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -748,7 +748,7 @@ PollerFlux> beginRecognizeBu .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm( modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - null)) + null, true)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java index bffe38efdeab..d46cb0f5d026 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java @@ -42,6 +42,7 @@ import static com.azure.ai.formrecognizer.implementation.Utility.forEachWithIndex; import static com.azure.ai.formrecognizer.implementation.models.FieldValueType.ARRAY; +import static com.azure.ai.formrecognizer.implementation.models.FieldValueType.OBJECT; /** * Helper class to convert service level models to SDK exposed models. @@ -63,10 +64,11 @@ private Transforms() { * @param includeFieldElements Boolean to indicate if to set reference elements data on fields. * * @param modelId the unlabeled model Id used for recognition. + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The List of {@code RecognizedForm}. */ static List toRecognizedForm(AnalyzeResult analyzeResult, boolean includeFieldElements, - String modelId) { + String modelId, boolean isBusinessCard) { List readResults = analyzeResult.getReadResults(); List documentResults = analyzeResult.getDocumentResults(); List pageResults = analyzeResult.getPageResults(); @@ -85,7 +87,8 @@ static List toRecognizedForm(AnalyzeResult analyzeResult, boolea formPageRange = new FormPageRange(1, 1); } - Map extractedFieldMap = getLabeledFieldMap(documentResultItem, readResults); + Map extractedFieldMap = getLabeledFieldMap(documentResultItem, readResults, + isBusinessCard); final RecognizedForm recognizedForm = new RecognizedForm( extractedFieldMap, documentResultItem.getDocType(), @@ -209,10 +212,11 @@ static List getReadResultFormLines(ReadResult readResultItem) { * * @param documentResultItem The extracted document level information. * @param readResults The text extraction result returned by the service. + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The {@link RecognizedForm#getFields}. */ private static Map getLabeledFieldMap(DocumentResult documentResultItem, - List readResults) { + List readResults, boolean isBusinessCard) { Map recognizedFieldMap = new LinkedHashMap<>(); // add receipt fields if (!CoreUtils.isNullOrEmpty(documentResultItem.getFields())) { @@ -226,7 +230,7 @@ private static Map getLabeledFieldMap(DocumentResult document valueData = new FieldData(fieldValue.getText(), toBoundingBox(fieldValue.getBoundingBox()), fieldValue.getPage(), formElementList); } - recognizedFieldMap.put(key, setFormField(key, valueData, fieldValue, readResults)); + recognizedFieldMap.put(key, setFormField(key, valueData, fieldValue, readResults, isBusinessCard)); } else { recognizedFieldMap.put(key, new FormField(key, null, null, null, DEFAULT_CONFIDENCE_VALUE)); @@ -241,14 +245,15 @@ private static Map getLabeledFieldMap(DocumentResult document * {@link FormField} with reference elements set when {@code includeFieldElements} is set to true. * * @param name The name of the field. - * @param fieldValue The named field values returned by the service. * @param valueData The value text of the field. + * @param fieldValue The named field values returned by the service. * @param readResults The text extraction result returned by the service. * + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The strongly typed {@link FormField} for the field input. */ private static FormField setFormField(String name, FieldData valueData, FieldValue fieldValue, - List readResults) { + List readResults, boolean isBusinessCard) { com.azure.ai.formrecognizer.models.FieldValue value; switch (fieldValue.getType()) { case PHONE_NUMBER: @@ -286,17 +291,18 @@ private static FormField setFormField(String name, FieldData valueData, FieldVal break; case ARRAY: value = new com.azure.ai.formrecognizer.models.FieldValue( - toFieldValueArray(fieldValue.getValueArray(), readResults), FieldValueType.LIST); + toFieldValueArray(fieldValue.getValueArray(), readResults, isBusinessCard), FieldValueType.LIST); break; case OBJECT: value = new com.azure.ai.formrecognizer.models.FieldValue( - toFieldValueObject(fieldValue.getValueObject(), readResults), FieldValueType.MAP); + toFieldValueObject(fieldValue.getValueObject(), readResults, isBusinessCard), FieldValueType.MAP); break; default: throw LOGGER.logExceptionAsError(new RuntimeException("FieldValue Type not supported")); } - return new FormField(name, null, valueData, value, setDefaultConfidenceValue(fieldValue.getConfidence())); + return new FormField(name, null, valueData, value, + setDefaultConfidenceValue(fieldValue.getConfidence())); } /** @@ -317,10 +323,11 @@ private static float setDefaultConfidenceValue(Float confidence) { * * @param valueObject The array of field values returned by the service in {@link FieldValue#getValueObject()}. * + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The Map of {@link FormField}. */ private static Map toFieldValueObject(Map valueObject, - List readResults) { + List readResults, boolean isBusinessCard) { Map fieldValueObjectMap = new TreeMap<>(); valueObject.forEach((key, fieldValue) -> fieldValueObjectMap.put(key, @@ -330,7 +337,7 @@ private static Map toFieldValueObject(Map fieldValue.getPage(), setReferenceElements(fieldValue.getElements(), readResults)), fieldValue, - readResults) + readResults, isBusinessCard) )); return fieldValueObjectMap; } @@ -342,20 +349,32 @@ private static Map toFieldValueObject(Map * * @param valueArray The array of field values returned by the service in {@link FieldValue#getValueArray()}. * @param readResults The text extraction result returned by the service. - * + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The List of {@link FormField}. */ - private static List toFieldValueArray(List valueArray, List readResults) { + private static List toFieldValueArray(List valueArray, List readResults, + boolean isBusinessCard) { return valueArray.stream() .map(fieldValue -> { FieldData valueData = null; // ARRAY has ho value data, such as bounding box. - if (ARRAY != fieldValue.getType()) { + if (ARRAY != fieldValue.getType() && OBJECT != fieldValue.getType()) { valueData = new FieldData(fieldValue.getText(), toBoundingBox(fieldValue.getBoundingBox()), - fieldValue.getPage() == null ? 1 : fieldValue.getPage(), + fieldValue.getPage(), setReferenceElements(fieldValue.getElements(), readResults)); + } else if (isBusinessCard && OBJECT.equals(fieldValue.getType())) { + // TODO: (savaity) Service bug, update after fixed. + if (fieldValue.getValueObject().get("FirstName") != null + && fieldValue.getValueObject().get("LastName") != null) { + if (fieldValue.getValueObject().get("FirstName").getPage() + .equals(fieldValue.getValueObject().get("LastName").getPage())) { + valueData = new FieldData(fieldValue.getText(), toBoundingBox(fieldValue.getBoundingBox()), + fieldValue.getValueObject().get("FirstName").getPage(), + setReferenceElements(fieldValue.getElements(), readResults)); + } + } } - return setFormField(null, valueData, fieldValue, readResults); + return setFormField(null, valueData, fieldValue, readResults, isBusinessCard); }) .collect(Collectors.toList()); } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClientTest.java index 87b6f67a9a82..666feadc01bb 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClientTest.java @@ -28,8 +28,8 @@ import java.time.Duration; import java.util.List; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.BUSINESS_CARD; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.RECEIPT; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.BUSINESS_CARD; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.RECEIPT; import static com.azure.ai.formrecognizer.TestUtils.BLANK_PDF; import static com.azure.ai.formrecognizer.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS; import static com.azure.ai.formrecognizer.TestUtils.FORM_JPG; diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java index 44923ceb4d7e..372488c0562c 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java @@ -29,8 +29,8 @@ import java.util.Arrays; import java.util.List; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.BUSINESS_CARD; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.RECEIPT; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.BUSINESS_CARD; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.RECEIPT; import static com.azure.ai.formrecognizer.TestUtils.BLANK_PDF; import static com.azure.ai.formrecognizer.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS; import static com.azure.ai.formrecognizer.TestUtils.FORM_JPG; diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java index 04e30f6aab14..270f1d7a80d1 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java @@ -58,8 +58,7 @@ import java.util.function.Consumer; import java.util.regex.Pattern; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.BUSINESS_CARD; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.RECEIPT; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.BUSINESS_CARD; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.AZURE_FORM_RECOGNIZER_API_KEY; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.AZURE_FORM_RECOGNIZER_ENDPOINT; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.FORM_RECOGNIZER_MULTIPAGE_TRAINING_BLOB_CONTAINER_SAS_URL; @@ -115,11 +114,11 @@ public abstract class FormRecognizerClientTestBase extends TestBase { static final List BUSINESS_CARD_FIELDS = Arrays.asList("ContactNames", "JobTitles", "Departments", "Emails", "Websites", "MobilePhones", "OtherPhones", "Faxes", "Addresses", "CompanyNames"); - // Business Card fields + // Receipt fields static final List RECEIPT_FIELDS = Arrays.asList("MerchantName", "MerchantPhoneNumber", "MerchantAddress", "Total", "Subtotal", "Tax", "TransactionDate", "TransactionDate", "TransactionTime", "Items"); - enum PREBUILT_TYPE { + enum PrebuiltType { RECEIPT, BUSINESS_CARD } @@ -628,7 +627,7 @@ void validateRecognizedResult(List actualFormList, boolean inclu } void validatePrebuiltResultData(List actualPrebuiltRecognizedForms, boolean includeFieldElements, - PREBUILT_TYPE prebuiltType) { + PrebuiltType prebuiltType) { final AnalyzeResult rawResponse = getAnalyzeRawResponse().getAnalyzeResult(); final List rawReadResults = rawResponse.getReadResults(); for (int i = 0; i < actualPrebuiltRecognizedForms.size(); i++) { @@ -794,6 +793,11 @@ static void validateMultipageBusinessData(List recognizedBusines assertEquals("+14257793479", phoneNumberList.get(0).getValue().asPhoneNumber()); assertNotNull(businessCard1.getPages()); + // assert contact name page number + FormField contactNameField = businessCard1Fields.get("ContactNames").getValue().asList().get(0); + assertEquals(contactNameField.getValueData().getPageNumber(), 1); + assertEquals(contactNameField.getValueData().getText(), "JOHN SINGER"); + assertEquals(2, businessCard2.getPageRange().getFirstPageNumber()); assertEquals(2, businessCard2.getPageRange().getLastPageNumber()); Map businessCard2Fields = businessCard2.getFields(); @@ -802,6 +806,11 @@ static void validateMultipageBusinessData(List recognizedBusines List phoneNumber2List = businessCard2Fields.get("OtherPhones").getValue().asList(); assertEquals("+44 (0) 20 9876 5432", phoneNumber2List.get(0).getValueData().getText()); assertNotNull(businessCard2.getPages()); + + // assert contact name page number + FormField contactName2Field = businessCard2Fields.get("ContactNames").getValue().asList().get(0); + assertEquals(contactName2Field.getValueData().getPageNumber(), 2); + assertEquals(contactName2Field.getValueData().getText(), "Dr. Avery Smith"); } static void validateMultipageReceiptData(List recognizedReceipts) { From ea651fb551cdd9d54333151768963914e9137b7f Mon Sep 17 00:00:00 2001 From: Srikanta <51379715+srnagar@users.noreply.github.com> Date: Fri, 23 Oct 2020 11:08:59 -0700 Subject: [PATCH 06/24] Add service method annotations to Event Hub clients (#16642) * Add service method annotations to Event Hub clients * Add revapi exclusion to ignore @ServiceClientBuilder annotation update --- .../resources/checkstyle/checkstyle-suppressions.xml | 11 +++++++++-- .../src/main/resources/revapi/revapi.json | 6 ++++++ .../messaging/eventhubs/EventHubClientBuilder.java | 3 ++- .../eventhubs/EventHubConsumerAsyncClient.java | 6 ++++++ .../messaging/eventhubs/EventHubConsumerClient.java | 4 ++++ .../eventhubs/EventHubProducerAsyncClient.java | 6 ++++++ .../messaging/eventhubs/EventHubProducerClient.java | 8 ++++++++ 7 files changed, 41 insertions(+), 3 deletions(-) diff --git a/eng/code-quality-reports/src/main/resources/checkstyle/checkstyle-suppressions.xml b/eng/code-quality-reports/src/main/resources/checkstyle/checkstyle-suppressions.xml index b39b25ffc59c..9f2ab7237ea1 100755 --- a/eng/code-quality-reports/src/main/resources/checkstyle/checkstyle-suppressions.xml +++ b/eng/code-quality-reports/src/main/resources/checkstyle/checkstyle-suppressions.xml @@ -473,6 +473,7 @@ + + + + + + + @@ -603,11 +610,11 @@ - + - + diff --git a/eng/code-quality-reports/src/main/resources/revapi/revapi.json b/eng/code-quality-reports/src/main/resources/revapi/revapi.json index bc69bcd19c16..eb8afd82f704 100644 --- a/eng/code-quality-reports/src/main/resources/revapi/revapi.json +++ b/eng/code-quality-reports/src/main/resources/revapi/revapi.json @@ -235,6 +235,12 @@ "code": "java\\.class\\.externalClassExposedInAPI", "new": "(interface|class|enum) io\\.opentelemetry.*", "justification": "Azure Monitor Exporter is allowed to use OpenTelemetry types in public APIs as it implements interfaces defined by OpenTelemetry" + }, + { + "code": "java.annotation.attributeAdded", + "old": "class com.azure.messaging.eventhubs.EventHubClientBuilder", + "new": "class com.azure.messaging.eventhubs.EventHubClientBuilder", + "justification": "Setting protocol to AMQP in @ServiceClientBuilder annotation is not a breaking change" } ] } diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubClientBuilder.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubClientBuilder.java index a21eb74f8f0b..0ffe23f98ad1 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubClientBuilder.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubClientBuilder.java @@ -18,6 +18,7 @@ import com.azure.core.amqp.implementation.TokenManagerProvider; import com.azure.core.amqp.implementation.TracerProvider; import com.azure.core.annotation.ServiceClientBuilder; +import com.azure.core.annotation.ServiceClientProtocol; import com.azure.core.credential.TokenCredential; import com.azure.core.exception.AzureException; import com.azure.core.util.ClientOptions; @@ -94,7 +95,7 @@ * @see EventHubConsumerClient */ @ServiceClientBuilder(serviceClients = {EventHubProducerAsyncClient.class, EventHubProducerClient.class, - EventHubConsumerAsyncClient.class, EventHubConsumerClient.class}) + EventHubConsumerAsyncClient.class, EventHubConsumerClient.class}, protocol = ServiceClientProtocol.AMQP) public class EventHubClientBuilder { // Default number of events to fetch when creating the consumer. diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerAsyncClient.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerAsyncClient.java index 50c3d59d86f2..ee88f75aa6b0 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerAsyncClient.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerAsyncClient.java @@ -140,6 +140,7 @@ public Mono getEventHubProperties() { * * @return A Flux of identifiers for the partitions of an Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux getPartitionIds() { return getEventHubProperties().flatMapMany(properties -> Flux.fromIterable(properties.getPartitionIds())); } @@ -177,6 +178,7 @@ public Mono getPartitionProperties(String partitionId) { * @throws NullPointerException if {@code partitionId}, or {@code startingPosition} is null. * @throws IllegalArgumentException if {@code partitionId} is an empty string. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receiveFromPartition(String partitionId, EventPosition startingPosition) { return receiveFromPartition(partitionId, startingPosition, defaultReceiveOptions); } @@ -205,6 +207,7 @@ public Flux receiveFromPartition(String partitionId, EventPositi * null. * @throws IllegalArgumentException if {@code partitionId} is an empty string. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receiveFromPartition(String partitionId, EventPosition startingPosition, ReceiveOptions receiveOptions) { if (Objects.isNull(partitionId)) { @@ -235,6 +238,7 @@ public Flux receiveFromPartition(String partitionId, EventPositi * * @return A stream of events for every partition in the Event Hub starting from the beginning of each partition. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receive() { return receive(true, defaultReceiveOptions); } @@ -256,6 +260,7 @@ public Flux receive() { * * @return A stream of events for every partition in the Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receive(boolean startReadingAtEarliestEvent) { return receive(startReadingAtEarliestEvent, defaultReceiveOptions); } @@ -289,6 +294,7 @@ public Flux receive(boolean startReadingAtEarliestEvent) { * * @throws NullPointerException if {@code receiveOptions} is null. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receive(boolean startReadingAtEarliestEvent, ReceiveOptions receiveOptions) { if (Objects.isNull(receiveOptions)) { return fluxError(logger, new NullPointerException("'receiveOptions' cannot be null.")); diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerClient.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerClient.java index bc985d7c54be..7abf3cd381d5 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerClient.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerClient.java @@ -94,6 +94,7 @@ public EventHubProperties getEventHubProperties() { * * @return The set of identifiers for the partitions of an Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream getPartitionIds() { return new IterableStream<>(consumer.getPartitionIds()); } @@ -128,6 +129,7 @@ public PartitionProperties getPartitionProperties(String partitionId) { * @throws IllegalArgumentException if {@code maximumMessageCount} is less than 1, or if {@code partitionId} is an * empty string. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream receiveFromPartition(String partitionId, int maximumMessageCount, EventPosition startingPosition) { return receiveFromPartition(partitionId, maximumMessageCount, startingPosition, timeout); @@ -150,6 +152,7 @@ public IterableStream receiveFromPartition(String partitionId, i * @throws IllegalArgumentException if {@code maximumMessageCount} is less than 1 or {@code maximumWaitTime} is * zero or a negative duration. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream receiveFromPartition(String partitionId, int maximumMessageCount, EventPosition startingPosition, Duration maximumWaitTime) { if (Objects.isNull(maximumWaitTime)) { @@ -197,6 +200,7 @@ public IterableStream receiveFromPartition(String partitionId, i * @throws IllegalArgumentException if {@code maximumMessageCount} is less than 1 or {@code maximumWaitTime} is * zero or a negative duration. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream receiveFromPartition(String partitionId, int maximumMessageCount, EventPosition startingPosition, Duration maximumWaitTime, ReceiveOptions receiveOptions) { if (Objects.isNull(maximumWaitTime)) { diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java index 2a502d8afc86..760b7d6b135d 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java @@ -171,6 +171,7 @@ public Mono getEventHubProperties() { * * @return A Flux of identifiers for the partitions of an Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux getPartitionIds() { return getEventHubProperties().flatMapMany(properties -> Flux.fromIterable(properties.getPartitionIds())); } @@ -194,6 +195,7 @@ public Mono getPartitionProperties(String partitionId) { * * @return A new {@link EventDataBatch} that can fit as many events as the transport allows. */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono createBatch() { return createBatch(DEFAULT_BATCH_OPTIONS); } @@ -205,6 +207,7 @@ public Mono createBatch() { * @return A new {@link EventDataBatch} that can fit as many events as the transport allows. * @throws NullPointerException if {@code options} is null. */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono createBatch(CreateBatchOptions options) { if (options == null) { return monoError(logger, new NullPointerException("'options' cannot be null.")); @@ -312,6 +315,7 @@ Mono send(EventData event, SendOptions options) { * @return A {@link Mono} that completes when all events are pushed to the service. * @throws AmqpException if the size of {@code events} exceed the maximum size of a single batch. */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono send(Iterable events) { if (events == null) { return monoError(logger, new NullPointerException("'events' cannot be null.")); @@ -338,6 +342,7 @@ public Mono send(Iterable events) { * @return A {@link Mono} that completes when all events are pushed to the service. * @throws AmqpException if the size of {@code events} exceed the maximum size of a single batch. */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono send(Iterable events, SendOptions options) { if (events == null) { return monoError(logger, new NullPointerException("'events' cannot be null.")); @@ -392,6 +397,7 @@ Mono send(Flux events, SendOptions options) { * @see EventHubProducerAsyncClient#createBatch() * @see EventHubProducerAsyncClient#createBatch(CreateBatchOptions) */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono send(EventDataBatch batch) { if (batch == null) { return monoError(logger, new NullPointerException("'batch' cannot be null.")); diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerClient.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerClient.java index 700fd8d9c648..f805d67b2c25 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerClient.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerClient.java @@ -100,6 +100,7 @@ public EventHubProperties getEventHubProperties() { * * @return A Flux of identifiers for the partitions of an Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream getPartitionIds() { return new IterableStream<>(producer.getPartitionIds()); } @@ -122,6 +123,7 @@ public PartitionProperties getPartitionProperties(String partitionId) { * * @return A new {@link EventDataBatch} that can fit as many events as the transport allows. */ + @ServiceMethod(returns = ReturnType.SINGLE) public EventDataBatch createBatch() { return producer.createBatch().block(tryTimeout); } @@ -135,6 +137,7 @@ public EventDataBatch createBatch() { * * @throws NullPointerException if {@code options} is null. */ + @ServiceMethod(returns = ReturnType.SINGLE) public EventDataBatch createBatch(CreateBatchOptions options) { return producer.createBatch(options).block(tryTimeout); } @@ -151,6 +154,7 @@ public EventDataBatch createBatch(CreateBatchOptions options) { * * @param event Event to send to the service. */ + @ServiceMethod(returns = ReturnType.SINGLE) void send(EventData event) { producer.send(event).block(); } @@ -168,6 +172,7 @@ void send(EventData event) { * @param event Event to send to the service. * @param options The set of options to consider when sending this event. */ + @ServiceMethod(returns = ReturnType.SINGLE) void send(EventData event, SendOptions options) { producer.send(event, options).block(); } @@ -188,6 +193,7 @@ void send(EventData event, SendOptions options) { * @param events Events to send to the service. * @throws AmqpException if the size of {@code events} exceed the maximum size of a single batch. */ + @ServiceMethod(returns = ReturnType.SINGLE) public void send(Iterable events) { producer.send(events).block(); } @@ -209,6 +215,7 @@ public void send(Iterable events) { * @param options The set of options to consider when sending this batch. * @throws AmqpException if the size of {@code events} exceed the maximum size of a single batch. */ + @ServiceMethod(returns = ReturnType.SINGLE) public void send(Iterable events, SendOptions options) { producer.send(events, options).block(); } @@ -221,6 +228,7 @@ public void send(Iterable events, SendOptions options) { * @see EventHubProducerClient#createBatch() * @see EventHubProducerClient#createBatch(CreateBatchOptions) */ + @ServiceMethod(returns = ReturnType.SINGLE) public void send(EventDataBatch batch) { producer.send(batch).block(); } From 76aa5f15d23ff8f5bd5baaa08667fb3d890fe16f Mon Sep 17 00:00:00 2001 From: Shawn Fang <45607042+mssfang@users.noreply.github.com> Date: Fri, 23 Oct 2020 12:03:01 -0700 Subject: [PATCH 07/24] [FR] Add support for Selection Mark feature (#16638) * Added a new feature, Selection Mark to FR --- .../resources/spotbugs/spotbugs-exclude.xml | 17 ++ .../azure-ai-formrecognizer/CHANGELOG.md | 5 + .../azure-ai-formrecognizer/README.md | 22 ++- .../FormRecognizerClientBuilder.java | 2 - .../azure/ai/formrecognizer/Transforms.java | 72 +++++++- .../models/CreateComposedModelOptions.java | 3 +- .../ai/formrecognizer/models/FieldValue.java | 20 +++ .../formrecognizer/models/FieldValueType.java | 5 +- .../ai/formrecognizer/models/FormPage.java | 17 +- .../models/FormSelectionMark.java | 65 +++++++ .../models/SelectionMarkState.java | 30 ++++ .../training/CustomModelTransforms.java | 4 +- .../training/FormTrainingAsyncClient.java | 4 +- .../training/models/TrainingOptions.java | 3 +- .../AdvancedDiffLabeledUnlabeledData.java | 9 +- ...AdvancedDiffLabeledUnlabeledDataAsync.java | 9 +- .../ai/formrecognizer/GetBoundingBoxes.java | 4 +- .../formrecognizer/GetBoundingBoxesAsync.java | 17 +- .../ai/formrecognizer/ReadmeSamples.java | 5 + .../ai/formrecognizer/RecognizeContent.java | 9 +- .../RecognizeContentFromUrlAsync.java | 13 +- .../RecognizeContentWithSelectionMarks.java | 76 ++++++++ ...izeCustomFormsAsyncWithSelectionMarks.java | 129 ++++++++++++++ .../RecognizeCustomFormsFromUrl.java | 4 +- .../sample-forms/forms/selectionMarkForm.pdf | Bin 0 -> 251215 bytes .../FormRecognizerAsyncClientTest.java | 78 +++++++++ .../FormRecognizerClientTest.java | 75 ++++++++ .../FormRecognizerClientTestBase.java | 56 +++++- .../FormTrainingClientTestBase.java | 6 +- .../azure/ai/formrecognizer/TestUtils.java | 46 ++--- ...zeContentWithSelectionMarksFromUrl[1].json | 84 +++++++++ ...recognizeContentWithSelectionMarks[1].json | 84 +++++++++ ...omFormLabeledDataWithSelectionMark[1].json | 144 +++++++++++++++ ...ormUrlLabeledDataWithSelectionMark[1].json | 164 ++++++++++++++++++ ...zeContentWithSelectionMarksFromUrl[1].json | 64 +++++++ ...recognizeContentWithSelectionMarks[1].json | 84 +++++++++ ...omFormLabeledDataWithSelectionMark[1].json | 144 +++++++++++++++ ...ormUrlLabeledDataWithSelectionMark[1].json | 144 +++++++++++++++ sdk/formrecognizer/test-resources.json | 17 ++ 39 files changed, 1624 insertions(+), 110 deletions(-) create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormSelectionMark.java create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/SelectionMarkState.java create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentWithSelectionMarks.java create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsAsyncWithSelectionMarks.java create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/forms/selectionMarkForm.pdf create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarksFromUrl[1].json create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarks[1].json create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarksFromUrl[1].json create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarks[1].json create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json create mode 100644 sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json diff --git a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml index 9c83c11e658b..6d1003c75812 100755 --- a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml +++ b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml @@ -1333,6 +1333,23 @@ + + + + + + + + + + + + + + + + + diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md b/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md index f05c9ac0147c..b730ce667093 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md +++ b/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md @@ -10,6 +10,11 @@ - Added support for providing locale info when recognizing receipts and business cards. Supported locales include support EN-US, EN-AU, EN-CA, EN-GB, EN-IN. - Added support for pre-built business card recognition. +- Added support to `beginRecognizeContent` to recognize selection marks such as check boxes and radio buttons. +- Added support to train and recognize custom forms with selection marks such as check boxes and radio buttons. +This functionality is only available in trained with labels scenarios. +- When passing `includeFieldElements` as true in `RecognizeCustomFormsOptions`, the property `fieldElements` on `FieldData` +and `FormTableCell` will also be populated with any selection marks found on the page. ### Breaking changes - Defaults to the latest supported API version, which currently is `2.1-preview.1`. diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/README.md b/sdk/formrecognizer/azure-ai-formrecognizer/README.md index becf1de61838..c420405ba47a 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/README.md +++ b/sdk/formrecognizer/azure-ai-formrecognizer/README.md @@ -219,8 +219,9 @@ for (int i = 0; i < recognizedForms.size(); i++) { ``` ### Recognize Content -Recognize text and table structures, along with their bounding box coordinates, from documents. - +Recognize text, table structures and selection marks like radio buttons and check boxes, along with their bounding box +coordinates, from documents, without the need to train a model. + ```java // recognize form content using file input stream File form = new File("local/file_path/filename.png"); @@ -245,6 +246,11 @@ for (int i = 0; i < contentPageResults.size(); i++) { formTable.getCells().forEach(formTableCell -> System.out.printf("Cell has text %s.%n", formTableCell.getText())); }); + // Selection Mark + formPage.getSelectionMarks().forEach(selectionMark -> System.out.printf( + "Page: %s, Selection mark is %s within bounding box %s has a confidence score %.2f.%n", + selectionMark.getPageNumber(), selectionMark.getState(), selectionMark.getBoundingBox().toString(), + selectionMark.getConfidence())); } ``` @@ -254,7 +260,7 @@ can be found [here][service_recognize_receipt]. See [StronglyTypedRecognizedForm][strongly_typed_sample] for a suggested approach to extract information from receipts. - + ```java String receiptUrl = "https://docs.microsoft.com/azure/cognitive-services/form-recognizer/media" + "/contoso-allinone.jpg"; @@ -321,7 +327,7 @@ can be found [here][service_recognize_business_card]. See [StronglyTypedRecognizedForm][strongly_typed_sample] for a suggested approach to extract information from a business card. The given sample is for `receipt` but the same approach applies to `business card`. - + ```java String businessCardUrl = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/master/sdk/formrecognizer" @@ -384,7 +390,7 @@ for (int i = 0; i < businessCardPageResults.size(); i++) { Train a machine-learned model on your own form type. The resulting model will be able to recognize values from the types of forms it was trained on. Provide a container SAS url to your Azure Storage Blob container where you're storing the training documents. See details on setting this up in the [service quickstart documentation][quickstart_training]. - + ```java String trainingFilesUrl = "{SAS_URL_of_your_container_in_blob_storage}"; SyncPoller trainingPoller = @@ -417,7 +423,7 @@ customFormModel.getSubmodels().forEach(customFormSubmodel -> { ### Manage your models Manage the custom models in your Form Recognizer account. - + ```java // First, we see how many custom models we have, and what our limit is AccountProperties accountProperties = formTrainingClient.getAccountProperties(); @@ -458,7 +464,7 @@ to provide an invalid file source URL an `HttpResponseException` would be raised In the following code snippet, the error is handled gracefully by catching the exception and display the additional information about the error. - + ```java try { formRecognizerClient.beginRecognizeContentFromUrl("invalidSourceUrl"); @@ -493,7 +499,7 @@ These code samples show common scenario operations with the Azure Form Recognize #### Async APIs All the examples shown so far have been using synchronous APIs, but we provide full support for async APIs as well. You'll need to use `FormRecognizerAsyncClient` - + ```java FormRecognizerAsyncClient formRecognizerAsyncClient = new FormRecognizerClientBuilder() .credential(new AzureKeyCredential("{key}")) diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerClientBuilder.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerClientBuilder.java index 5818a038515b..e7210807b508 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerClientBuilder.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerClientBuilder.java @@ -31,7 +31,6 @@ import java.net.MalformedURLException; import java.net.URL; -import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; @@ -99,7 +98,6 @@ public final class FormRecognizerClientBuilder { private FormRecognizerServiceVersion version; static final String OCP_APIM_SUBSCRIPTION_KEY = "Ocp-Apim-Subscription-Key"; - static final Duration DEFAULT_DURATION = Duration.ofSeconds(5); /** * The constructor with defaults. */ diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java index d46cb0f5d026..74bb99310c86 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java @@ -7,9 +7,11 @@ import com.azure.ai.formrecognizer.implementation.models.AnalyzeResult; import com.azure.ai.formrecognizer.implementation.models.DocumentResult; import com.azure.ai.formrecognizer.implementation.models.FieldValue; +import com.azure.ai.formrecognizer.implementation.models.FieldValueSelectionMark; import com.azure.ai.formrecognizer.implementation.models.KeyValuePair; import com.azure.ai.formrecognizer.implementation.models.PageResult; import com.azure.ai.formrecognizer.implementation.models.ReadResult; +import com.azure.ai.formrecognizer.implementation.models.SelectionMarkState; import com.azure.ai.formrecognizer.implementation.models.TextLine; import com.azure.ai.formrecognizer.implementation.models.TextWord; import com.azure.ai.formrecognizer.models.FieldBoundingBox; @@ -20,6 +22,7 @@ import com.azure.ai.formrecognizer.models.FormLine; import com.azure.ai.formrecognizer.models.FormPage; import com.azure.ai.formrecognizer.models.FormPageRange; +import com.azure.ai.formrecognizer.models.FormSelectionMark; import com.azure.ai.formrecognizer.models.FormTable; import com.azure.ai.formrecognizer.models.FormTableCell; import com.azure.ai.formrecognizer.models.FormWord; @@ -144,6 +147,7 @@ static List toRecognizedLayout(AnalyzeResult analyzeResult, boolean in forEachWithIndex(readResults, ((index, readResultItem) -> { List perPageTableList = new ArrayList<>(); + // add form tables if (!pageResultsIsNullOrEmpty) { PageResult pageResultItem = pageResults.get(index); perPageTableList = getPageTables(pageResultItem, readResults, pageResultItem.getPage()); @@ -155,13 +159,51 @@ static List toRecognizedLayout(AnalyzeResult analyzeResult, boolean in perPageFormLineList = getReadResultFormLines(readResultItem); } - // get form tables - formPages.add(getFormPage(readResultItem, perPageTableList, perPageFormLineList)); + // add selection marks + List perPageFormSelectionMarkList = new ArrayList<>(); + if (includeFieldElements && !CoreUtils.isNullOrEmpty(readResultItem.getSelectionMarks())) { + PageResult pageResultItem = pageResults.get(index); + perPageFormSelectionMarkList = getReadResultFormSelectionMarks(readResultItem, + pageResultItem.getPage()); + } + + formPages.add(getFormPage(readResultItem, perPageTableList, perPageFormLineList, + perPageFormSelectionMarkList)); })); return formPages; } + /** + * Helper method to convert the per page {@link ReadResult} item to {@link FormSelectionMark}. + * + * @param readResultItem The per page text extraction item result returned by the service. + * @param pageNumber The page number. + * + * @return A list of {@code FormSelectionMark}. + */ + static List getReadResultFormSelectionMarks(ReadResult readResultItem, int pageNumber) { + return readResultItem.getSelectionMarks().stream() + .map(selectionMark -> { + final FormSelectionMark formSelectionMark = new FormSelectionMark( + null, toBoundingBox(selectionMark.getBoundingBox()), pageNumber); + final SelectionMarkState selectionMarkStateImpl = selectionMark.getState(); + com.azure.ai.formrecognizer.models.SelectionMarkState selectionMarkState = null; + if (SelectionMarkState.SELECTED.equals(selectionMarkStateImpl)) { + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.SELECTED; + } else if (SelectionMarkState.UNSELECTED.equals(selectionMarkStateImpl)) { + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.UNSELECTED; + } else { + throw LOGGER.logThrowableAsError(new RuntimeException( + String.format("%s, unsupported selection mark state.", selectionMarkStateImpl))); + } + PrivateFieldAccessHelper.set(formSelectionMark, "confidence", selectionMark.getConfidence()); + PrivateFieldAccessHelper.set(formSelectionMark, "state", selectionMarkState); + return formSelectionMark; + }) + .collect(Collectors.toList()); + } + /** * Helper method to get per-page table information. * @@ -297,6 +339,25 @@ private static FormField setFormField(String name, FieldData valueData, FieldVal value = new com.azure.ai.formrecognizer.models.FieldValue( toFieldValueObject(fieldValue.getValueObject(), readResults, isBusinessCard), FieldValueType.MAP); break; + case SELECTION_MARK: + com.azure.ai.formrecognizer.models.SelectionMarkState selectionMarkState = null; + final FieldValueSelectionMark fieldValueSelectionMarkState = fieldValue.getValueSelectionMark(); + if (FieldValueSelectionMark.SELECTED.equals(fieldValueSelectionMarkState)) { + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.SELECTED; + } else if (FieldValueSelectionMark.UNSELECTED.equals(fieldValueSelectionMarkState)) { + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.UNSELECTED; + } else { + // TODO: (ServiceBug) + // Currently, the fieldValue's valueSelectionMark is null which is incorrect. + // Use the fieldValue's text as the temperately solution. + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.fromString( + fieldValue.getText()); + // throw LOGGER.logThrowableAsError(new RuntimeException( + // String.format("%s, unsupported selection mark state.", selectionMarkState))); + } + value = new com.azure.ai.formrecognizer.models.FieldValue(selectionMarkState, + FieldValueType.SELECTION_MARK_STATE); + break; default: throw LOGGER.logExceptionAsError(new RuntimeException("FieldValue Type not supported")); } @@ -385,12 +446,13 @@ private static List toFieldValueArray(List valueArray, Li * @param readResultItem The per page text extraction item result returned by the service. * @param perPageTableList The per page tables list. * @param perPageLineList The per page form lines. + * @param perPageSelectionMarkList The per page selection marks. * * @return The per page {@code FormPage}. */ private static FormPage getFormPage(ReadResult readResultItem, List perPageTableList, - List perPageLineList) { - return new FormPage( + List perPageLineList, List perPageSelectionMarkList) { + FormPage formPage = new FormPage( readResultItem.getHeight(), readResultItem.getAngle(), LengthUnit.fromString(readResultItem.getUnit().toString()), @@ -398,6 +460,8 @@ private static FormPage getFormPage(ReadResult readResultItem, List p perPageLineList, perPageTableList, readResultItem.getPage()); + PrivateFieldAccessHelper.set(formPage, "selectionMarks", perPageSelectionMarkList); + return formPage; } /** diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/CreateComposedModelOptions.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/CreateComposedModelOptions.java index 2feb9692eb11..9a90df0d67bc 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/CreateComposedModelOptions.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/CreateComposedModelOptions.java @@ -7,12 +7,13 @@ import java.time.Duration; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; + /** * The configurable options to pass when creating a composed model. */ @Fluent public final class CreateComposedModelOptions { - private static final Duration DEFAULT_POLL_INTERVAL = Duration.ofSeconds(5); private String modelName; private Duration pollInterval = DEFAULT_POLL_INTERVAL; diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValue.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValue.java index a08b228a3e8e..7e36482b65e9 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValue.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValue.java @@ -17,6 +17,7 @@ import static com.azure.ai.formrecognizer.models.FieldValueType.LONG; import static com.azure.ai.formrecognizer.models.FieldValueType.MAP; import static com.azure.ai.formrecognizer.models.FieldValueType.PHONE_NUMBER; +import static com.azure.ai.formrecognizer.models.FieldValueType.SELECTION_MARK_STATE; import static com.azure.ai.formrecognizer.models.FieldValueType.STRING; import static com.azure.ai.formrecognizer.models.FieldValueType.TIME; @@ -33,6 +34,7 @@ public final class FieldValue { private Long formFieldLong; private LocalDate formFieldDate; private LocalTime formFieldTime; + private SelectionMarkState selectionMarkState; private String formFieldString; private String formFieldPhoneNumber; @@ -70,6 +72,9 @@ public FieldValue(final Object value, final FieldValueType valueType) { case MAP: formFieldMap = (Map) value; break; + case SELECTION_MARK_STATE: + selectionMarkState = (SelectionMarkState) value; + break; default: throw logger.logExceptionAsError(new IllegalStateException("Unexpected type value: " + valueType)); } @@ -196,4 +201,19 @@ public Map asMap() { } return this.formFieldMap; } + + /** + * Gets the value of the field as a selection mark state. + * + * @return the value of the field as an unmodifiable selection mark state. + * @throws UnsupportedOperationException if {@link FieldValue#getValueType()} is not + * {@link FieldValueType#SELECTION_MARK_STATE}. + */ + public SelectionMarkState asSelectionMarkState() { + if (SELECTION_MARK_STATE != this.getValueType()) { + throw logger.logExceptionAsError((new UnsupportedOperationException(String.format( + "Cannot get field as a %s from field value of type %s", SELECTION_MARK_STATE, this.getValueType())))); + } + return this.selectionMarkState; + } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValueType.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValueType.java index 9a87eb33e121..b459dbad3391 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValueType.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValueType.java @@ -27,5 +27,8 @@ public enum FieldValueType { LIST, /** Enum value map. */ - MAP; + MAP, + + /** Enum value selection mark state. */ + SELECTION_MARK_STATE; } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormPage.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormPage.java index 269dda772def..01730ffe8506 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormPage.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormPage.java @@ -3,15 +3,12 @@ package com.azure.ai.formrecognizer.models; -import com.azure.core.annotation.Immutable; - import java.util.Collections; import java.util.List; /** * The FormPage model. */ -@Immutable public final class FormPage { /* @@ -29,6 +26,11 @@ public final class FormPage { */ private final List tables; + /* + * List of selection marks extracted from the page. + */ + private List selectionMarks; + /* * The general orientation of the text in clockwise direction, measured in * degrees between (-180, 180]. @@ -140,5 +142,14 @@ public float getWidth() { public Integer getPageNumber() { return this.pageNumber; } + + /** + * Get the selection marks in the input document. + * + * @return the selection marks. + */ + public List getSelectionMarks() { + return Collections.unmodifiableList(this.selectionMarks); + } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormSelectionMark.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormSelectionMark.java new file mode 100644 index 000000000000..791ea518aa66 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormSelectionMark.java @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.formrecognizer.models; + +/** + * The FormSelectionMark model. + */ +public final class FormSelectionMark extends FormElement { + private float confidence; + private SelectionMarkState state; + + /** + * Creates a FormSelectionMark. + * + * @param text The text content of the extracted element. + * @param boundingBox The BoundingBox specifying relative coordinates of the element. + * @param pageNumber the 1 based page number. + */ + public FormSelectionMark(String text, FieldBoundingBox boundingBox, int pageNumber) { + super(text, boundingBox, pageNumber); + } + + /** + * {@inheritDoc} + */ + @Override + public FieldBoundingBox getBoundingBox() { + return super.getBoundingBox(); + } + + /** + * {@inheritDoc} + */ + @Override + public String getText() { + return super.getText(); + } + + /** + * {@inheritDoc} + */ + @Override + public int getPageNumber() { + return super.getPageNumber(); + } + + /** + * Gets the state property of the selection mark. + * + * @return the state property of the selection mark. + */ + public SelectionMarkState getState() { + return this.state; + } + + /** + * Gets the confidence property of the selection mark. + * + * @return the confidence property of the selection mark. + */ + public float getConfidence() { + return this.confidence; + } +} diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/SelectionMarkState.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/SelectionMarkState.java new file mode 100644 index 000000000000..9f3fc2bdd7d6 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/SelectionMarkState.java @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.formrecognizer.models; + +import com.azure.core.util.ExpandableStringEnum; + +/** Defines values for SelectionMarkState. i.e., Selected or Unselected */ +public final class SelectionMarkState extends ExpandableStringEnum { + /** + * Static value SELECTED for SelectionMarkState. + */ + public static final SelectionMarkState SELECTED = fromString("selected"); + + /** + * Static value UNSELECTED for SelectionMarkState. + */ + public static final SelectionMarkState UNSELECTED = fromString("unselected"); + + /** + * Creates or finds a SelectionMarkState from its string representation. + * + * @param value a value to look for. + * + * @return the corresponding SelectionMarkState. + */ + public static SelectionMarkState fromString(String value) { + return fromString(value, SelectionMarkState.class); + } +} diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/CustomModelTransforms.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/CustomModelTransforms.java index 1148a941f773..50634f274849 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/CustomModelTransforms.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/CustomModelTransforms.java @@ -12,15 +12,14 @@ import com.azure.ai.formrecognizer.training.models.CustomFormModel; import com.azure.ai.formrecognizer.training.models.CustomFormModelField; import com.azure.ai.formrecognizer.training.models.CustomFormModelInfo; +import com.azure.ai.formrecognizer.training.models.CustomFormModelProperties; import com.azure.ai.formrecognizer.training.models.CustomFormModelStatus; import com.azure.ai.formrecognizer.training.models.CustomFormSubmodel; -import com.azure.ai.formrecognizer.training.models.CustomFormModelProperties; import com.azure.ai.formrecognizer.training.models.TrainingDocumentInfo; import com.azure.ai.formrecognizer.training.models.TrainingStatus; import com.azure.core.util.CoreUtils; import com.azure.core.util.logging.ClientLogger; -import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -35,7 +34,6 @@ */ final class CustomModelTransforms { private static final ClientLogger LOGGER = new ClientLogger(CustomModelTransforms.class); - static final Duration DEFAULT_DURATION = Duration.ofSeconds(5); private CustomModelTransforms() { } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/FormTrainingAsyncClient.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/FormTrainingAsyncClient.java index 8c743c43cdfe..dd285eabc05b 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/FormTrainingAsyncClient.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/FormTrainingAsyncClient.java @@ -54,9 +54,9 @@ import java.util.function.Function; import java.util.stream.Collectors; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; import static com.azure.ai.formrecognizer.implementation.Utility.parseModelId; import static com.azure.ai.formrecognizer.implementation.Utility.urlActivationOperation; -import static com.azure.ai.formrecognizer.training.CustomModelTransforms.DEFAULT_DURATION; import static com.azure.ai.formrecognizer.training.CustomModelTransforms.toCustomFormModel; import static com.azure.ai.formrecognizer.training.CustomModelTransforms.toCustomFormModelInfo; import static com.azure.core.util.FluxUtil.monoError; @@ -423,7 +423,7 @@ public PollerFlux beginCopyM PollerFlux beginCopyModel(String modelId, CopyAuthorization target, Duration pollInterval, Context context) { - final Duration interval = pollInterval != null ? pollInterval : DEFAULT_DURATION; + final Duration interval = pollInterval != null ? pollInterval : DEFAULT_POLL_INTERVAL; return new PollerFlux( interval, getCopyActivationOperation(modelId, target, context), diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/models/TrainingOptions.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/models/TrainingOptions.java index 86944fcb192f..ec18e75b15cd 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/models/TrainingOptions.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/models/TrainingOptions.java @@ -7,12 +7,13 @@ import java.time.Duration; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; + /** * Options that may be passed when using training APIs on Form Training client. */ @Fluent public final class TrainingOptions { - private static final Duration DEFAULT_POLL_INTERVAL = Duration.ofSeconds(5); private Duration pollInterval = DEFAULT_POLL_INTERVAL; private TrainingFileFilter trainingFileFilter; private String modelName; diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledData.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledData.java index b39781d881e5..463bec20d6f3 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledData.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledData.java @@ -73,15 +73,10 @@ public static void main(String[] args) throws IOException { // `labelText` is not populated for a model trained with labels as this was the given label used to extract // the key formsWithLabeledModel.forEach(labeledForm -> labeledForm.getFields().forEach((label, formField) -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formField.getValueData().getBoundingBox() != null) { - formField.getValueData().getBoundingBox().getPoints().stream().map(point -> - String.format("[%.2f, %.2f]", point.getX(), point.getY())).forEach(boundingBoxStr::append); - } System.out.printf("Field %s has value data text %s based on %s within bounding box %s with a confidence " + "score of %.2f.%n", - label, formField.getValueData().getText(), formField.getValueData().getText(), boundingBoxStr, - formField.getConfidence()); + label, formField.getValueData().getText(), formField.getValueData().getText(), + formField.getValueData().getBoundingBox().toString(), formField.getConfidence()); // Find the value of a specific labeled field. System.out.println("Value for a specific labeled field using the training-time label:"); diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledDataAsync.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledDataAsync.java index ad11769c1cc4..aa730b23f748 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledDataAsync.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledDataAsync.java @@ -103,15 +103,10 @@ public static void main(String[] args) throws IOException { // the key labeledDataResult.subscribe(formsWithLabeledModel -> formsWithLabeledModel.forEach(labeledForm -> labeledForm.getFields().forEach((label, formField) -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formField.getValueData().getBoundingBox() != null) { - formField.getValueData().getBoundingBox().getPoints().stream().map(point -> String.format("[%.2f," - + " %.2f]", point.getX(), point.getY())).forEach(boundingBoxStr::append); - } System.out.printf("Field %s has value data text %s based on %s within bounding box %s with " + "a confidence score of %.2f.%n", - label, formField.getValueData().getText(), formField.getValueData().getText(), boundingBoxStr, - formField.getConfidence()); + label, formField.getValueData().getText(), formField.getValueData().getText(), + formField.getValueData().getBoundingBox().toString(), formField.getConfidence()); // Find the value of a specific labeled field. System.out.println("Value for a specific labeled field using the training-time label:"); diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxes.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxes.java index e6483c8b043b..d516acc3a526 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxes.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxes.java @@ -70,8 +70,8 @@ public static void main(String[] args) { System.out.printf("Cell text %s has following words: %n", formTableCell.getText()); // FormElements only exists if you set includeFieldElements to true in your // call to beginRecognizeCustomFormsFromUrl - // It is also a list of FormWords and FormLines, but in this example, we only deal with - // FormWords + // It is also a list of FormWords, FormLines and FormSelectionMarks, but in this example, + // we only deal with FormWords. formTableCell.getFieldElements().stream() .filter(formContent -> formContent instanceof FormWord) .map(formContent -> (FormWord) (formContent)) diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxesAsync.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxesAsync.java index 28385c37cb92..79700e578548 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxesAsync.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxesAsync.java @@ -82,22 +82,15 @@ public static void main(String[] args) { System.out.printf("Cell text %s has following words: %n", formTableCell.getText()); // FormElements only exists if you set includeFieldElements to true in your // call to beginRecognizeCustomFormsFromUrl - // It is also a list of FormWords and FormLines, but in this example, we only deal with - // FormWords + // It is also a list of FormWords, FormLines and FormSelectionMarks, but in this example, + // we only deal with FormWords. formTableCell.getFieldElements().stream() .filter(formContent -> formContent instanceof FormWord) .map(formContent -> (FormWord) (formContent)) - .forEach(formWordElement -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formWordElement.getBoundingBox() != null) { - formWordElement.getBoundingBox().getPoints().forEach(point -> - boundingBoxStr.append(String.format("[%.2f, %.2f]", point.getX(), - point.getY()))); - } + .forEach(formWordElement -> System.out.printf("Word '%s' within bounding box %s with a confidence of %.2f.%n", - formWordElement.getText(), boundingBoxStr, - formWordElement.getConfidence()); - }); + formWordElement.getText(), formWordElement.getBoundingBox().toString(), + formWordElement.getConfidence())); }); System.out.println(); } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/ReadmeSamples.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/ReadmeSamples.java index 03c71373c2f0..c3d647fe53dd 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/ReadmeSamples.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/ReadmeSamples.java @@ -136,6 +136,11 @@ public void recognizeContent() throws IOException { formTable.getCells().forEach(formTableCell -> System.out.printf("Cell has text %s.%n", formTableCell.getText())); }); + // Selection Mark + formPage.getSelectionMarks().forEach(selectionMark -> System.out.printf( + "Page: %s, Selection mark is %s within bounding box %s has a confidence score %.2f.%n", + selectionMark.getPageNumber(), selectionMark.getState(), selectionMark.getBoundingBox().toString(), + selectionMark.getConfidence())); } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContent.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContent.java index db5df5f1694f..88537f386138 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContent.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContent.java @@ -4,8 +4,8 @@ package com.azure.ai.formrecognizer; import com.azure.ai.formrecognizer.models.FormPage; -import com.azure.ai.formrecognizer.models.FormTable; import com.azure.ai.formrecognizer.models.FormRecognizerOperationResult; +import com.azure.ai.formrecognizer.models.FormTable; import com.azure.core.credential.AzureKeyCredential; import com.azure.core.util.polling.SyncPoller; @@ -58,13 +58,8 @@ public static void main(final String[] args) throws IOException { System.out.printf("Table %d has %d rows and %d columns.%n", i1, formTable.getRowCount(), formTable.getColumnCount()); formTable.getCells().forEach(formTableCell -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formTableCell.getBoundingBox() != null) { - formTableCell.getBoundingBox().getPoints().forEach(point -> - boundingBoxStr.append(String.format("[%.2f, %.2f]", point.getX(), point.getY()))); - } System.out.printf("Cell has text '%s', within bounding box %s.%n", formTableCell.getText(), - boundingBoxStr); + formTableCell.getBoundingBox().toString()); }); System.out.println(); } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentFromUrlAsync.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentFromUrlAsync.java index f7c239c4c64e..12ad86480128 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentFromUrlAsync.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentFromUrlAsync.java @@ -4,8 +4,8 @@ package com.azure.ai.formrecognizer; import com.azure.ai.formrecognizer.models.FormPage; -import com.azure.ai.formrecognizer.models.FormTable; import com.azure.ai.formrecognizer.models.FormRecognizerOperationResult; +import com.azure.ai.formrecognizer.models.FormTable; import com.azure.core.credential.AzureKeyCredential; import com.azure.core.util.polling.PollerFlux; import reactor.core.publisher.Mono; @@ -25,7 +25,6 @@ public class RecognizeContentFromUrlAsync { */ public static void main(final String[] args) { // Instantiate a client that will be used to call the service. - FormRecognizerAsyncClient client = new FormRecognizerClientBuilder() .credential(new AzureKeyCredential("{key}")) .endpoint("https://{endpoint}.cognitiveservices.azure.com/") @@ -59,15 +58,9 @@ public static void main(final String[] args) { final FormTable formTable = tables.get(i1); System.out.printf("Table %d has %d rows and %d columns.%n", i1, formTable.getRowCount(), formTable.getColumnCount()); - formTable.getCells().forEach(formTableCell -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formTableCell.getBoundingBox() != null) { - formTableCell.getBoundingBox().getPoints().forEach(point -> - boundingBoxStr.append(String.format("[%.2f, %.2f]", point.getX(), point.getY()))); - } + formTable.getCells().forEach(formTableCell -> System.out.printf("Cell has text '%s', within bounding box %s.%n", formTableCell.getText(), - boundingBoxStr); - }); + formTableCell.getBoundingBox().toString())); System.out.println(); } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentWithSelectionMarks.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentWithSelectionMarks.java new file mode 100644 index 000000000000..5a964da25d12 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentWithSelectionMarks.java @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.formrecognizer; + +import com.azure.ai.formrecognizer.models.FormPage; +import com.azure.ai.formrecognizer.models.FormRecognizerOperationResult; +import com.azure.ai.formrecognizer.models.FormSelectionMark; +import com.azure.ai.formrecognizer.models.FormTable; +import com.azure.core.credential.AzureKeyCredential; +import com.azure.core.util.polling.SyncPoller; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.List; + +/** + * Sample for recognizing content information with selection mark from a document given through a file. + */ +public class RecognizeContentWithSelectionMarks { + /** + * Main method to invoke this demo. + * + * @param args Unused. Arguments to the program. + * + * @throws IOException Exception thrown when there is an error in reading all the bytes from the File. + */ + public static void main(final String[] args) throws IOException { + // Instantiate a client that will be used to call the service. + FormRecognizerClient client = new FormRecognizerClientBuilder() + .credential(new AzureKeyCredential("{key}")) + .endpoint("https://{endpoint}.cognitiveservices.azure.com/") + .buildClient(); + + File sourceFile = new File("../formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/" + + "forms/selectionMarkForm.pdf"); + byte[] fileContent = Files.readAllBytes(sourceFile.toPath()); + InputStream targetStream = new ByteArrayInputStream(fileContent); + + SyncPoller> recognizeContentPoller = + client.beginRecognizeContent(targetStream, sourceFile.length()); + + List contentPageResults = recognizeContentPoller.getFinalResult(); + + for (int i = 0; i < contentPageResults.size(); i++) { + final FormPage formPage = contentPageResults.get(i); + System.out.printf("---- Recognized content info for page %d ----%n", i); + // Table information + System.out.printf("Has width: %.2f and height: %.2f, measured with unit: %s%n", formPage.getWidth(), + formPage.getHeight(), + formPage.getUnit()); + final List tables = formPage.getTables(); + for (int i1 = 0; i1 < tables.size(); i1++) { + final FormTable formTable = tables.get(i1); + System.out.printf("Table %d has %d rows and %d columns.%n", i1, formTable.getRowCount(), + formTable.getColumnCount()); + formTable.getCells().forEach(formTableCell -> + System.out.printf("Cell has text '%s', within bounding box %s.%n", formTableCell.getText(), + formTableCell.getBoundingBox().toString())); + System.out.println(); + } + // Selection Mark + for (FormSelectionMark selectionMark : formPage.getSelectionMarks()) { + System.out.printf( + "Page: %s, Selection mark is %s within bounding box %s has a confidence score %.2f.%n", + selectionMark.getPageNumber(), + selectionMark.getState(), + selectionMark.getBoundingBox().toString(), + selectionMark.getConfidence()); + } + } + } +} diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsAsyncWithSelectionMarks.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsAsyncWithSelectionMarks.java new file mode 100644 index 000000000000..6bc65aa86ec2 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsAsyncWithSelectionMarks.java @@ -0,0 +1,129 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.formrecognizer; + +import com.azure.ai.formrecognizer.models.FormPage; +import com.azure.ai.formrecognizer.models.FormRecognizerOperationResult; +import com.azure.ai.formrecognizer.models.FormSelectionMark; +import com.azure.ai.formrecognizer.models.FormTable; +import com.azure.ai.formrecognizer.models.RecognizeCustomFormsOptions; +import com.azure.ai.formrecognizer.models.RecognizedForm; +import com.azure.core.credential.AzureKeyCredential; +import com.azure.core.util.polling.PollerFlux; +import reactor.core.publisher.Mono; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import static com.azure.ai.formrecognizer.implementation.Utility.toFluxByteBuffer; + +/** + * Async sample to analyze a form with selection mark from a document with a custom trained model. To learn how to train + * your own models, look at TrainModelWithoutLabels.java and TrainModelWithLabels.java. + */ +public class RecognizeCustomFormsAsyncWithSelectionMarks { + /** + * Main method to invoke this demo. + * + * @param args Unused arguments to the program. + * + * @throws IOException Exception thrown when there is an error in reading all the bytes from the File. + */ + public static void main(String[] args) throws IOException { + // Instantiate a client that will be used to call the service. + FormRecognizerAsyncClient client = new FormRecognizerClientBuilder() + .credential(new AzureKeyCredential("{key}")) + .endpoint("https://{endpoint}.cognitiveservices.azure.com/") + .buildAsyncClient(); + + // The form you are recognizing must be of the same type as the forms the custom model was trained on + File sourceFile = new File("../formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/" + + "forms/selectionMarkForm.pdf"); + byte[] fileContent = Files.readAllBytes(sourceFile.toPath()); + String modelId = "{modelId}"; + PollerFlux> recognizeFormPoller; + // Selection mark will only be available when includeFieldElements is true. + try (InputStream targetStream = new ByteArrayInputStream(fileContent)) { + recognizeFormPoller = client.beginRecognizeCustomForms(modelId, toFluxByteBuffer(targetStream), + sourceFile.length(), new RecognizeCustomFormsOptions().setFieldElementsIncluded(true)); + } + + Mono> recognizeFormResult = + recognizeFormPoller + .last() + .flatMap(pollResponse -> { + if (pollResponse.getStatus().isComplete()) { + // training completed successfully, retrieving final result. + return pollResponse.getFinalResult(); + } else { + return Mono.error(new RuntimeException("Polling completed unsuccessfully with status:" + + pollResponse.getStatus())); + } + }); + + recognizeFormResult.subscribe(recognizedForms -> { + for (int i = 0; i < recognizedForms.size(); i++) { + final RecognizedForm form = recognizedForms.get(i); + System.out.printf("----------- Recognized custom form info for page %d -----------%n", i); + System.out.printf("Form type: %s%n", form.getFormType()); + System.out.printf("Form has form type confidence : %.2f%n", form.getFormTypeConfidence()); + System.out.printf("Form was analyzed with model with ID: ", form.getModelId()); + form.getFields().forEach((label, formField) -> { + System.out.printf("Field '%s' has label '%s' with confidence score of %.2f.%n", label, + formField.getLabelData().getText(), + formField.getConfidence()); + }); + + // Page Information + final List pages = form.getPages(); + for (int i1 = 0; i1 < pages.size(); i1++) { + final FormPage formPage = pages.get(i1); + System.out.printf("------- Recognizing info on page %s of Form ------- %n", i1); + System.out.printf("Has width: %f, angle: %.2f, height: %f %n", formPage.getWidth(), + formPage.getTextAngle(), formPage.getHeight()); + // Table information + System.out.println("Recognized Tables: "); + final List tables = formPage.getTables(); + for (int i2 = 0; i2 < tables.size(); i2++) { + final FormTable formTable = tables.get(i2); + System.out.printf("Table %d%n", i2); + formTable.getCells() + .forEach(formTableCell -> { + System.out.printf("Cell text %s has following words: %n", formTableCell.getText()); + // FormElements only exists if you set includeFieldElements to true in your + // call to beginRecognizeCustomFormsFromUrl + // It is also a list of FormWords, FormLines and FormSelectionMarks, but in this example, + // we only deal with FormSelectionMarks. + formTableCell.getFieldElements().stream() + .filter(formContent -> formContent instanceof FormSelectionMark) + .map(formContent -> (FormSelectionMark) (formContent)) + .forEach(selectionMark -> + System.out.printf("Page: %s, Selection mark is %s within bounding box %s has a " + + "confidence score %.2f.%n", + selectionMark.getPageNumber(), + selectionMark.getState(), + selectionMark.getBoundingBox().toString(), + selectionMark.getConfidence())); + }); + System.out.println(); + } + } + } + }); + + // The .subscribe() creation and assignment is not a blocking call. For the purpose of this example, we sleep + // the thread so the program does not end before the send operation is complete. Using .block() instead of + // .subscribe() will turn this into a synchronous call. + try { + TimeUnit.MINUTES.sleep(1); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsFromUrl.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsFromUrl.java index 91be572b0ab3..862718b44ae3 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsFromUrl.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsFromUrl.java @@ -45,8 +45,8 @@ public static void main(String[] args) { form.getFields().forEach((label, formField) -> // label data is populated if you are using a model trained with unlabeled data, // since the service needs to make predictions for labels if not explicitly given to it. - System.out.printf("Field '%s' has label '%s' with a confidence " - + "score of %.2f.%n", label, formField.getLabelData().getText(), formField.getConfidence())); + System.out.printf("Field '%s' has label '%s' with a confidence score of %.2f.%n", + label, formField.getLabelData().getText(), formField.getConfidence())); } } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/forms/selectionMarkForm.pdf b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/forms/selectionMarkForm.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0721647fa52b7ef94774b3966676a22b5b668ee1 GIT binary patch literal 251215 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%0Apo(8P*Y`@Ex{WF9jhfhX4z)c_bhF5 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 |LOH0$R{Es3;F=EZb;dv?t9w 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 z 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 { + SyncPoller> syncPoller = client.beginRecognizeContent( + toFluxByteBuffer(data), dataLength, new RecognizeContentOptions() + .setContentType(FormContentType.APPLICATION_PDF) + .setPollInterval(durationTestMode)).getSyncPoller(); + syncPoller.waitForCompletion(); + validateContentResultData(syncPoller.getFinalResult(), false); + }, SELECTION_MARK_PDF); + } + // Content - URL /** @@ -475,6 +491,21 @@ public void recognizeContentFromUrlMultiPage(HttpClient httpClient, FormRecogniz }, MULTIPAGE_INVOICE_PDF); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeContentWithSelectionMarksFromUrl(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerAsyncClient(httpClient, serviceVersion); + urlRunner(sourceUrl -> { + SyncPoller> syncPoller = + client.beginRecognizeContentFromUrl(sourceUrl, + new RecognizeContentOptions().setPollInterval(durationTestMode)) + .getSyncPoller(); + syncPoller.waitForCompletion(); + validateContentResultData(syncPoller.getFinalResult(), false); + }, SELECTION_MARK_PDF); + } + // Custom form recognition // Custom form - non-URL - labeled data @@ -713,6 +744,32 @@ public void recognizeCustomFormMultiPageLabeled(HttpClient httpClient, }), MULTIPAGE_INVOICE_PDF); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeCustomFormLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerAsyncClient(httpClient, serviceVersion); + dataRunner((data, dataLength) -> + beginSelectionMarkTrainingLabeledRunner((trainingFilesUrl, useTrainingLabels) -> { + SyncPoller trainingPoller = + getFormTrainingAsyncClient(httpClient, serviceVersion).beginTraining(trainingFilesUrl, + useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode)) + .getSyncPoller(); + trainingPoller.waitForCompletion(); + + SyncPoller> syncPoller = + client.beginRecognizeCustomForms(trainingPoller.getFinalResult().getModelId(), + toFluxByteBuffer(data), + dataLength, + new RecognizeCustomFormsOptions() + .setContentType(FormContentType.APPLICATION_PDF).setFieldElementsIncluded(true) + .setPollInterval(durationTestMode)) + .getSyncPoller(); + syncPoller.waitForCompletion(); + validateRecognizedResult(syncPoller.getFinalResult(), true, true); + }), SELECTION_MARK_PDF); + } + // Custom form - non-URL - unlabeled data /** @@ -1108,6 +1165,27 @@ useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode)) })); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeCustomFormUrlLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerAsyncClient(httpClient, serviceVersion); + urlRunner(fileUrl -> beginSelectionMarkTrainingLabeledRunner((trainingFilesUrl, useTrainingLabels) -> { + SyncPoller trainingPoller = + getFormTrainingAsyncClient(httpClient, serviceVersion).beginTraining(trainingFilesUrl, + useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode)) + .getSyncPoller(); + trainingPoller.waitForCompletion(); + + SyncPoller> syncPoller = + client.beginRecognizeCustomFormsFromUrl(trainingPoller.getFinalResult().getModelId(), fileUrl, + new RecognizeCustomFormsOptions().setFieldElementsIncluded(true).setPollInterval(durationTestMode)) + .getSyncPoller(); + syncPoller.waitForCompletion(); + validateRecognizedResult(syncPoller.getFinalResult(), true, true); + }), SELECTION_MARK_PDF); + } + // Business Card Recognition /** diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java index 372488c0562c..c3b3f08e8d5b 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java @@ -37,6 +37,7 @@ import static com.azure.ai.formrecognizer.TestUtils.INVALID_SOURCE_URL_ERROR_CODE; import static com.azure.ai.formrecognizer.TestUtils.INVALID_URL; import static com.azure.ai.formrecognizer.TestUtils.NON_EXIST_MODEL_ID; +import static com.azure.ai.formrecognizer.TestUtils.SELECTION_MARK_PDF; import static com.azure.ai.formrecognizer.TestUtils.getContentDetectionFileData; import static com.azure.ai.formrecognizer.TestUtils.validateExceptionSource; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -377,6 +378,20 @@ public void recognizeContentFromDamagedPdf(HttpClient httpClient, }); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeContentWithSelectionMarks(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerClient(httpClient, serviceVersion); + dataRunner((data, dataLength) -> { + SyncPoller> syncPoller = + client.beginRecognizeContent(data, dataLength, new RecognizeContentOptions() + .setContentType(FormContentType.APPLICATION_PDF).setPollInterval(durationTestMode), Context.NONE); + syncPoller.waitForCompletion(); + validateContentResultData(syncPoller.getFinalResult(), false); + }, SELECTION_MARK_PDF); + } + // Content - URL @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) @@ -450,6 +465,20 @@ public void recognizeContentFromUrlMultiPage(HttpClient httpClient, FormRecogniz }, MULTIPAGE_INVOICE_PDF); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeContentWithSelectionMarksFromUrl(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerClient(httpClient, serviceVersion); + urlRunner(sourceUrl -> { + SyncPoller> syncPoller = + client.beginRecognizeContentFromUrl(sourceUrl, + new RecognizeContentOptions().setPollInterval(durationTestMode), Context.NONE); + syncPoller.waitForCompletion(); + validateContentResultData(syncPoller.getFinalResult(), false); + }, SELECTION_MARK_PDF); + } + // Custom form recognition // Custom form - non-URL - labeled data @@ -668,6 +697,30 @@ public void recognizeCustomFormMultiPageLabeled(HttpClient httpClient, }), MULTIPAGE_INVOICE_PDF); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeCustomFormLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerClient(httpClient, serviceVersion); + dataRunner((data, dataLength) -> + beginSelectionMarkTrainingLabeledRunner((trainingFilesUrl, useTrainingLabels) -> { + SyncPoller trainingPoller = + getFormTrainingClient(httpClient, serviceVersion).beginTraining(trainingFilesUrl, + useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode), Context.NONE); + trainingPoller.waitForCompletion(); + + SyncPoller> syncPoller = + client.beginRecognizeCustomForms(trainingPoller.getFinalResult().getModelId(), data, dataLength, + new RecognizeCustomFormsOptions() + .setContentType(FormContentType.APPLICATION_PDF) + .setFieldElementsIncluded(true) + .setPollInterval(durationTestMode), + Context.NONE); + syncPoller.waitForCompletion(); + validateRecognizedResult(syncPoller.getFinalResult(), true, true); + }), SELECTION_MARK_PDF); + } + // Custom form - non-URL - unlabeled data /** @@ -1028,6 +1081,28 @@ dataLength, new RecognizeCustomFormsOptions() })); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeCustomFormUrlLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + urlRunner(fileUrl -> beginSelectionMarkTrainingLabeledRunner((trainingFilesUrl, useTrainingLabels) -> { + client = getFormRecognizerClient(httpClient, serviceVersion); + + SyncPoller trainingPoller = + getFormTrainingClient(httpClient, serviceVersion).beginTraining(trainingFilesUrl, + useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode), Context.NONE); + trainingPoller.waitForCompletion(); + + SyncPoller> syncPoller = + client.beginRecognizeCustomFormsFromUrl(trainingPoller.getFinalResult().getModelId(), fileUrl, + new RecognizeCustomFormsOptions().setFieldElementsIncluded(true) + .setPollInterval(durationTestMode), + Context.NONE); + syncPoller.waitForCompletion(); + validateRecognizedResult(syncPoller.getFinalResult(), true, true); + }), SELECTION_MARK_PDF); + } + /** * Verifies recognized form type when labeled model used for recognition and model name is provided by user. */ diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java index 270f1d7a80d1..05f357be35a3 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java @@ -13,6 +13,7 @@ import com.azure.ai.formrecognizer.implementation.models.OperationStatus; import com.azure.ai.formrecognizer.implementation.models.PageResult; import com.azure.ai.formrecognizer.implementation.models.ReadResult; +import com.azure.ai.formrecognizer.implementation.models.SelectionMark; import com.azure.ai.formrecognizer.implementation.models.TextLine; import com.azure.ai.formrecognizer.implementation.models.TextWord; import com.azure.ai.formrecognizer.models.FieldBoundingBox; @@ -21,6 +22,7 @@ import com.azure.ai.formrecognizer.models.FormLine; import com.azure.ai.formrecognizer.models.FormPage; import com.azure.ai.formrecognizer.models.FormPageRange; +import com.azure.ai.formrecognizer.models.FormSelectionMark; import com.azure.ai.formrecognizer.models.FormTable; import com.azure.ai.formrecognizer.models.FormTableCell; import com.azure.ai.formrecognizer.models.FormWord; @@ -36,7 +38,6 @@ import com.azure.core.test.models.NetworkCallRecord; import com.azure.core.util.Configuration; import com.azure.core.util.serializer.SerializerAdapter; -import com.azure.identity.DefaultAzureCredentialBuilder; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; @@ -62,15 +63,16 @@ import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.AZURE_FORM_RECOGNIZER_API_KEY; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.AZURE_FORM_RECOGNIZER_ENDPOINT; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.FORM_RECOGNIZER_MULTIPAGE_TRAINING_BLOB_CONTAINER_SAS_URL; +import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.FORM_RECOGNIZER_TRAINING_BLOB_CONTAINER_SAS_URL; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.deserializeRawResponse; -import static com.azure.ai.formrecognizer.TestUtils.DEFAULT_DURATION; import static com.azure.ai.formrecognizer.TestUtils.FAKE_ENCODED_EMPTY_SPACE_URL; import static com.azure.ai.formrecognizer.TestUtils.INVALID_KEY; import static com.azure.ai.formrecognizer.TestUtils.ONE_NANO_DURATION; import static com.azure.ai.formrecognizer.TestUtils.TEST_DATA_PNG; import static com.azure.ai.formrecognizer.TestUtils.URL_TEST_FILE_FORMAT; import static com.azure.ai.formrecognizer.TestUtils.getSerializerAdapter; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -132,7 +134,7 @@ protected void beforeTest() { if (interceptorManager.isPlaybackMode()) { durationTestMode = ONE_NANO_DURATION; } else { - durationTestMode = DEFAULT_DURATION; + durationTestMode = DEFAULT_POLL_INTERVAL; } } @@ -148,7 +150,9 @@ FormRecognizerClientBuilder getFormRecognizerClientBuilder(HttpClient httpClient if (getTestMode() == TestMode.PLAYBACK) { builder.credential(new AzureKeyCredential(INVALID_KEY)); } else { - builder.credential(new DefaultAzureCredentialBuilder().build()); + // TODO: (savaity) switch back to AAD once fixed on service - side. +// builder.credential(new DefaultAzureCredentialBuilder().build()); + builder.credential(new AzureKeyCredential(Configuration.getGlobalConfiguration().get("AZURE_FORM_RECOGNIZER_API_KEY"))); } return builder; } @@ -254,6 +258,19 @@ private static void validateFormLineData(List expectedLines, List
expectedMarks, + List actualMarks, int pageNumber) { + for (int i = 0; i < actualMarks.size(); i++) { + final SelectionMark expectedMark = expectedMarks.get(i); + final FormSelectionMark actualMark = actualMarks.get(i); + assertEquals(expectedMark.getState().toString(), actualMark.getState().toString()); + validateBoundingBoxData(expectedMark.getBoundingBox(), actualMark.getBoundingBox()); + // Currently, service has the null as the text value for layout. + assertNull(actualMark.getText()); + assertEquals(pageNumber, actualMark.getPageNumber()); + } + } + private static void validateFormWordData(List expectedFormWords, List actualFormWordList) { assertEquals(expectedFormWords.size(), actualFormWordList.size()); @@ -414,6 +431,10 @@ abstract void recognizeContentResultWithBlankPdf(HttpClient httpClient, @Test abstract void recognizeContentFromDataMultiPage(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); + @Test + abstract void recognizeContentWithSelectionMarks(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion); + // Content - URL @Test @@ -428,6 +449,10 @@ abstract void recognizeContentResultWithBlankPdf(HttpClient httpClient, @Test abstract void recognizeContentFromUrlMultiPage(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); + @Test + abstract void recognizeContentWithSelectionMarksFromUrl(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion); + // Custom form recognition // Custom form - non-URL - labeled data @@ -470,6 +495,10 @@ abstract void recognizeCustomFormLabeledDataWithContentTypeAutoDetection(HttpCli abstract void recognizeCustomFormMultiPageLabeled(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); + @Test + abstract void recognizeCustomFormLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion); + // Custom form - non-URL - unlabeled data @Test abstract void recognizeCustomFormUnlabeledData(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); @@ -529,6 +558,10 @@ abstract void recognizeCustomFormUrlLabeledDataIncludeFieldElements(HttpClient h abstract void recognizeCustomFormUrlMultiPageLabeled(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); + @Test + abstract void recognizeCustomFormUrlLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion); + // Business Card - data @Test abstract void recognizeBusinessCardData(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); @@ -596,6 +629,9 @@ void validateContentResultData(List actualFormPageList, boolean includ if (includeFieldElements) { validateFormLineData(readResult.getLines(), actualFormPage.getLines()); } + + validateFormSelectionMarkData(readResult.getSelectionMarks(), actualFormPage.getSelectionMarks(), + readResult.getPage()); if (pageResults != null) { validateFormTableData(pageResults.get(i).getTables(), actualFormPage.getTables(), readResults, includeFieldElements, pageResults.get(i).getPage()); @@ -704,6 +740,10 @@ void beginTrainingLabeledRunner(BiConsumer testRunner) { testRunner.accept(getTrainingSasUri(), true); } + void beginSelectionMarkTrainingLabeledRunner(BiConsumer testRunner) { + testRunner.accept(getSelectionMarkTrainingSasUri(), true); + } + void beginTrainingMultipageRunner(Consumer testRunner) { testRunner.accept(getMultipageTrainingSasUri()); } @@ -872,6 +912,14 @@ private String getTrainingSasUri() { } } + private String getSelectionMarkTrainingSasUri() { + if (interceptorManager.isPlaybackMode()) { + return "https://isPlaybackmode"; + } else { + return Configuration.getGlobalConfiguration().get(FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL); + } + } + /** * Get the training data set SAS Url value based on the test running mode. * diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTestBase.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTestBase.java index c2a23447150a..c156778b1b25 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTestBase.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTestBase.java @@ -41,13 +41,13 @@ import java.util.function.Consumer; import java.util.stream.Collectors; -import static com.azure.ai.formrecognizer.FormRecognizerClientBuilder.DEFAULT_DURATION; import static com.azure.ai.formrecognizer.TestUtils.BLANK_PDF; import static com.azure.ai.formrecognizer.TestUtils.INVALID_KEY; import static com.azure.ai.formrecognizer.TestUtils.INVALID_RECEIPT_URL; import static com.azure.ai.formrecognizer.TestUtils.ONE_NANO_DURATION; import static com.azure.ai.formrecognizer.TestUtils.TEST_DATA_PNG; import static com.azure.ai.formrecognizer.TestUtils.getSerializerAdapter; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; import static com.azure.ai.formrecognizer.implementation.models.ModelStatus.READY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -65,6 +65,8 @@ public abstract class FormTrainingClientTestBase extends TestBase { "FORM_RECOGNIZER_TRAINING_BLOB_CONTAINER_SAS_URL"; static final String FORM_RECOGNIZER_MULTIPAGE_TRAINING_BLOB_CONTAINER_SAS_URL = "FORM_RECOGNIZER_MULTIPAGE_TRAINING_BLOB_CONTAINER_SAS_URL"; + static final String FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL = + "FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL"; static final String PREFIX_SUBFOLDER = "subfolder"; static final String INVALID_PREFIX_FILE_NAME = "XXXXX"; @@ -83,7 +85,7 @@ protected void beforeTest() { if (interceptorManager.isPlaybackMode()) { durationTestMode = ONE_NANO_DURATION; } else { - durationTestMode = DEFAULT_DURATION; + durationTestMode = DEFAULT_POLL_INTERVAL; } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/TestUtils.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/TestUtils.java index d59bc432b8e1..107afce9ee8b 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/TestUtils.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/TestUtils.java @@ -3,7 +3,6 @@ package com.azure.ai.formrecognizer; -import com.azure.ai.formrecognizer.implementation.Utility; import com.azure.core.exception.HttpResponseException; import com.azure.core.http.HttpClient; import com.azure.core.util.Configuration; @@ -12,20 +11,16 @@ import com.azure.core.util.serializer.JacksonAdapter; import com.azure.core.util.serializer.SerializerAdapter; import org.junit.jupiter.params.provider.Arguments; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; import reactor.test.StepVerifier; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; -import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.function.Function; import java.util.stream.Stream; import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.ENCODED_EMPTY_SPACE; @@ -37,27 +32,30 @@ * Contains helper methods for generating inputs for test methods */ final class TestUtils { - static final String URL_TEST_FILE_FORMAT = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/" - + "master/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/sample_files/Test/"; + // Duration + static final Duration ONE_NANO_DURATION = Duration.ofNanos(1); + // Local test files + static final String BLANK_PDF = "blank.pdf"; + static final String FORM_JPG = "Form_1.jpg"; + static final String TEST_DATA_PNG = "testData.png"; + static final String SELECTION_MARK_PDF = "selectionMarkForm.pdf"; + // Other resources + static final String DISPLAY_NAME_WITH_ARGUMENTS = "{displayName} with [{arguments}]"; static final String FAKE_ENCODED_EMPTY_SPACE_URL = "https://fakeuri.com/blank%20space"; static final String INVALID_IMAGE_URL_ERROR_CODE = "InvalidImageURL"; + static final String INVALID_KEY = "invalid key"; static final String INVALID_MODEL_ID = "a0a3998a-4c4affe66b7"; + static final String INVALID_MODEL_ID_ERROR = "Invalid UUID string: " + INVALID_MODEL_ID; static final String INVALID_RECEIPT_URL = "https://invalid.blob.core.windows.net/fr/contoso-allinone.jpg"; - static final String INVALID_KEY = "invalid key"; static final String INVALID_SOURCE_URL_ERROR_CODE = "1003"; - static final String INVALID_MODEL_ID_ERROR = "Invalid UUID string: " + INVALID_MODEL_ID; + static final String INVALID_URL = "htttttttps://localhost:8080"; static final String NON_EXIST_MODEL_ID = "00000000-0000-0000-0000-000000000000"; static final String NULL_SOURCE_URL_ERROR = "'trainingFilesUrl' cannot be null."; - static final String INVALID_URL = "htttttttps://localhost:8080"; + static final String URL_TEST_FILE_FORMAT = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/" + + "master/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/sample_files/Test/"; static final String VALID_HTTPS_LOCALHOST = "https://localhost:8080"; static final String VALID_HTTP_LOCALHOST = "http://localhost:8080"; - static final String BLANK_PDF = "blank.pdf"; - static final String FORM_JPG = "Form_1.jpg"; - static final String TEST_DATA_PNG = "testData.png"; static final String VALID_URL = "https://resources/contoso-allinone.jpg"; - static final String DISPLAY_NAME_WITH_ARGUMENTS = "{displayName} with [{arguments}]"; - static final Duration ONE_NANO_DURATION = Duration.ofNanos(1); - static final Duration DEFAULT_DURATION = Duration.ofSeconds(5); private TestUtils() { } @@ -70,22 +68,6 @@ static InputStream getContentDetectionFileData(String localFileUrl) { } } - static Flux getReplayableBufferData(String localFileUrl) { - Mono dataMono = Mono.defer(() -> { - try { - return Mono.just(new FileInputStream(localFileUrl)); - } catch (FileNotFoundException e) { - return Mono.error(new RuntimeException("Local file not found.", e)); - } - }); - return dataMono.flatMapMany(new Function>() { - @Override - public Flux apply(InputStream inputStream) { - return Utility.toFluxByteBuffer(inputStream); - } - }); - } - static SerializerAdapter getSerializerAdapter() { return JacksonAdapter.createDefaultSerializerAdapter(); } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarksFromUrl[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarksFromUrl[1].json new file mode 100644 index 000000000000..2ffd7dbc6720 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarksFromUrl[1].json @@ -0,0 +1,84 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyze", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "8d187b35-3268-4db4-aeb7-c08b97f0b46e", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "74", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "ae44ae82-3c41-4820-843f-dd0588025f0c", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/layout/analyzeResults/ae44ae82-3c41-4820-843f-dd0588025f0c", + "Date" : "Thu, 22 Oct 2020 04:39:54 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/ae44ae82-3c41-4820-843f-dd0588025f0c", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "acd27765-d9ed-49ef-974f-6f38772d0a1c" + }, + "Response" : { + "x-envoy-upstream-service-time" : "9", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "af347c93-39a3-49fe-9e4c-62651f199a13", + "retry-after" : "0", + "Content-Length" : "106", + "StatusCode" : "200", + "Body" : "{\"status\":\"running\",\"createdDateTime\":\"2020-10-22T04:39:55Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:39:55Z\"}", + "Date" : "Thu, 22 Oct 2020 04:40:00 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/ae44ae82-3c41-4820-843f-dd0588025f0c", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "c3a2ac98-cf31-4686-b8c6-1fa43c5bb350" + }, + "Response" : { + "x-envoy-upstream-service-time" : "25", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "2a68345d-373e-4a5a-b0a2-7e64eddef242", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:39:55Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:40:01Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 04:40:05 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/ae44ae82-3c41-4820-843f-dd0588025f0c", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "0c682ec8-089a-4101-b5fd-dc1eb5c44f2d" + }, + "Response" : { + "x-envoy-upstream-service-time" : "22", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "c11fe280-77fc-4928-89bc-afdd09011e06", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:39:55Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:40:01Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 04:40:05 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarks[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarks[1].json new file mode 100644 index 000000000000..fd2c80c2c29e --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarks[1].json @@ -0,0 +1,84 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyze", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "f0fca782-2ba9-45cf-a497-fb31aa2de048", + "Content-Type" : "application/pdf" + }, + "Response" : { + "x-envoy-upstream-service-time" : "131", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "c053f7e4-e100-4055-a910-688babe31cdc", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/layout/analyzeResults/c053f7e4-e100-4055-a910-688babe31cdc", + "Date" : "Wed, 21 Oct 2020 17:05:28 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/c053f7e4-e100-4055-a910-688babe31cdc", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "eba82e1b-0333-487b-bd00-46cb05c440ec" + }, + "Response" : { + "x-envoy-upstream-service-time" : "190", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a6fef349-1de3-44d1-a160-7ba4b3a3ba70", + "retry-after" : "0", + "Content-Length" : "106", + "StatusCode" : "200", + "Body" : "{\"status\":\"running\",\"createdDateTime\":\"2020-10-21T17:05:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:05:28Z\"}", + "Date" : "Wed, 21 Oct 2020 17:05:33 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/c053f7e4-e100-4055-a910-688babe31cdc", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "37f3bc39-5fbe-4e57-9725-665f3eebbf56" + }, + "Response" : { + "x-envoy-upstream-service-time" : "38", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "5e79d373-314a-4087-80b7-643db94d3769", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-21T17:05:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:05:35Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Wed, 21 Oct 2020 17:05:38 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/c053f7e4-e100-4055-a910-688babe31cdc", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "541dc8f6-4956-4ac6-8bee-b7086b2e518a" + }, + "Response" : { + "x-envoy-upstream-service-time" : "28", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "20b43022-fea2-4626-a16d-d8c345a0427c", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-21T17:05:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:05:35Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Wed, 21 Oct 2020 17:05:38 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json new file mode 100644 index 000000000000..95ec3b08ba6a --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json @@ -0,0 +1,144 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "9ec75e06-c03e-4fd8-8494-a84097db7ff8", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "215", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "30844b63-76d4-406f-8235-30bb4149cbd7", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "Date" : "Wed, 21 Oct 2020 17:10:27 GMT", + "Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/b18dc567-8fd5-4174-a20d-448cae64c358" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "7d098499-5a83-4d73-b2f4-7d094f92916d" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "22", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "2c913263-c4cc-4a08-a678-7625de77b376", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"b18dc567-8fd5-4174-a20d-448cae64c358\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-21T17:10:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:31Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Wed, 21 Oct 2020 17:10:33 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "5b89ee8d-5b63-44c7-8294-058941e319d8" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "24", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a9f55c93-ab14-408d-abbb-053b2a6287d3", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"b18dc567-8fd5-4174-a20d-448cae64c358\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-21T17:10:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:31Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Wed, 21 Oct 2020 17:10:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyze?includeTextDetails=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "e3592fb2-bafb-473d-99c6-2769fa5191bb", + "Content-Type" : "application/pdf" + }, + "Response" : { + "x-envoy-upstream-service-time" : "93", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "1c878e1a-077f-41dd-b0df-983ab581dcb5", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyzeresults/27953366-f55c-4218-958d-a8bb1df959f5", + "Date" : "Wed, 21 Oct 2020 17:10:34 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyzeResults/27953366-f55c-4218-958d-a8bb1df959f5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "deb76877-37bb-489d-ad8f-13551eba106b" + }, + "Response" : { + "x-envoy-upstream-service-time" : "43", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "d03e5f5b-5a4b-46a1-ab87-dadbc210f6c8", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-21T17:10:34Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:38Z\"}", + "Date" : "Wed, 21 Oct 2020 17:10:39 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyzeResults/27953366-f55c-4218-958d-a8bb1df959f5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "edb6d5be-794f-47ce-9678-67af4a8c5b96" + }, + "Response" : { + "x-envoy-upstream-service-time" : "36", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "e4160d0a-07bd-4fb0-9946-78455954eeef", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-21T17:10:34Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:44Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:b18dc567-8fd5-4174-a20d-448cae64c358\",\"modelId\":\"b18dc567-8fd5-4174-a20d-448cae64c358\",\"pageRange\":[1,1],\"fields\":{\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Wed, 21 Oct 2020 17:10:44 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyzeResults/27953366-f55c-4218-958d-a8bb1df959f5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "4cd6ea11-e7c8-4312-88db-fe1c5a0fa959" + }, + "Response" : { + "x-envoy-upstream-service-time" : "38", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "fa4caf27-5249-40d2-b254-6a35ccf7dc08", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-21T17:10:34Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:44Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:b18dc567-8fd5-4174-a20d-448cae64c358\",\"modelId\":\"b18dc567-8fd5-4174-a20d-448cae64c358\",\"pageRange\":[1,1],\"fields\":{\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Wed, 21 Oct 2020 17:10:45 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json new file mode 100644 index 000000000000..61f6db992fb2 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json @@ -0,0 +1,164 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "0d4d13ac-b269-4cf8-a397-eda4f5e491d0", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "132", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "cfac1b1d-87d9-4436-ab07-9d35bec17f50", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "Date" : "Thu, 22 Oct 2020 04:43:12 GMT", + "Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/58448c81-ad3c-4d00-8945-31c143c66778" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "991d5f1d-65ea-4f30-ade1-df8c8ad8749d" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "21", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "e7c9aa8c-1ee8-4ff4-be7e-dd1f95398b7b", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"58448c81-ad3c-4d00-8945-31c143c66778\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:43:13Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:17Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:43:18 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "257cb6e7-0345-4009-b16b-2963ab3ba625" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "23", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "ed5b18d2-1421-4a56-ba90-f1e00041c251", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"58448c81-ad3c-4d00-8945-31c143c66778\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:43:13Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:17Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:43:18 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyze?includeTextDetails=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "b73d9e4f-617f-4211-b1ac-53c029b9916a", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "76", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "b0638d62-63ae-403f-b4dc-f6add22f4213", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeresults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Date" : "Thu, 22 Oct 2020 04:43:18 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeResults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "8fa2e113-d1c5-4b11-acd5-95b29a4faca8" + }, + "Response" : { + "x-envoy-upstream-service-time" : "26", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "9fb04e26-3cdf-4918-8312-8ee9426f8796", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-22T04:43:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:23Z\"}", + "Date" : "Thu, 22 Oct 2020 04:43:23 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeResults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "74911a36-b5d5-4a19-839e-8256eb489553" + }, + "Response" : { + "x-envoy-upstream-service-time" : "28", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "68d79a2e-41f8-48b6-86cf-9248c08d0afb", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-22T04:43:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:26Z\"}", + "Date" : "Thu, 22 Oct 2020 04:43:28 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeResults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "f5777359-09f3-4ca7-ae3f-4d0d01e1a712" + }, + "Response" : { + "x-envoy-upstream-service-time" : "72", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "ccc78d59-2a7e-4c25-8c49-6bd0ed9902dd", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:43:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:29Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:58448c81-ad3c-4d00-8945-31c143c66778\",\"modelId\":\"58448c81-ad3c-4d00-8945-31c143c66778\",\"pageRange\":[1,1],\"fields\":{\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]},\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:43:33 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeResults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "e9e71177-9cba-4c94-8e48-49d9871435d6" + }, + "Response" : { + "x-envoy-upstream-service-time" : "39", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "94800e91-5613-4cab-acdf-6ba6ab7f7521", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:43:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:29Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:58448c81-ad3c-4d00-8945-31c143c66778\",\"modelId\":\"58448c81-ad3c-4d00-8945-31c143c66778\",\"pageRange\":[1,1],\"fields\":{\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]},\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:43:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarksFromUrl[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarksFromUrl[1].json new file mode 100644 index 000000000000..488c5fdebee6 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarksFromUrl[1].json @@ -0,0 +1,64 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyze", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "41b810db-5485-4731-9d3f-2ec8fa95eb0e", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "221", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a8861ab5-565d-4fff-b752-ae477620c3e9", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/layout/analyzeResults/a8861ab5-565d-4fff-b752-ae477620c3e9", + "Date" : "Thu, 22 Oct 2020 04:38:25 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/a8861ab5-565d-4fff-b752-ae477620c3e9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "8df1592a-9e76-425d-b243-c91044644928" + }, + "Response" : { + "x-envoy-upstream-service-time" : "46", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "fb3a73d8-927f-425b-919f-13349cb7e693", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:38:26Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:38:32Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 04:38:50 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/a8861ab5-565d-4fff-b752-ae477620c3e9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "e68c0ee9-457b-4bae-a040-3b0524073ed6" + }, + "Response" : { + "x-envoy-upstream-service-time" : "21", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "1289c36b-7306-4df1-aba8-18cac61cf0d5", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:38:26Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:38:32Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 04:38:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarks[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarks[1].json new file mode 100644 index 000000000000..c34ad6f02e00 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarks[1].json @@ -0,0 +1,84 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyze", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "008211b4-c42f-4780-b50a-61600c6a8aaf", + "Content-Type" : "application/pdf" + }, + "Response" : { + "x-envoy-upstream-service-time" : "119", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/layout/analyzeResults/3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "Date" : "Thu, 22 Oct 2020 06:38:40 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "04234c9a-5b2f-4357-8e82-974d5a6fb588" + }, + "Response" : { + "x-envoy-upstream-service-time" : "13", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "6d4d6d97-e547-4e44-a51d-67a54fe821eb", + "retry-after" : "0", + "Content-Length" : "106", + "StatusCode" : "200", + "Body" : "{\"status\":\"running\",\"createdDateTime\":\"2020-10-22T06:38:41Z\",\"lastUpdatedDateTime\":\"2020-10-22T06:38:41Z\"}", + "Date" : "Thu, 22 Oct 2020 06:38:45 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "337f54d2-1c18-4cf4-8369-d658dcafdb4f" + }, + "Response" : { + "x-envoy-upstream-service-time" : "95", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "fd9d24b9-6f54-4572-99a3-cb075a3df50f", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T06:38:41Z\",\"lastUpdatedDateTime\":\"2020-10-22T06:38:48Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 06:38:51 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "1cc1a0bd-bdf7-4002-a079-bc57ad336946" + }, + "Response" : { + "x-envoy-upstream-service-time" : "22", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "055899ee-a12e-46ab-a198-00f7adb71ce3", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T06:38:41Z\",\"lastUpdatedDateTime\":\"2020-10-22T06:38:48Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 06:38:51 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json new file mode 100644 index 000000000000..dc53ad59b10e --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json @@ -0,0 +1,144 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "09246005-5e8a-4fe3-bfec-311eed1be7ee", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "330", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "d5f64fdc-f6e1-41d3-bd2f-b26fbf8717ba", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "Date" : "Thu, 22 Oct 2020 04:27:48 GMT", + "Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "f5633e86-2203-4ea2-9017-27ad02ef0e14" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "29", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "efadd33a-20fd-4529-9d36-5d59934f470c", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:27:48Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:27:51Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:27:53 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "aa5f0e4b-b3f4-40bf-b1fa-7f2d253b5714" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "27", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a1560f66-e1e4-429f-a931-4e1f17e8ac36", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:27:48Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:27:51Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:27:53 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyze?includeTextDetails=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "cda3b623-af3f-44e1-8669-03910a6b4f6c", + "Content-Type" : "application/pdf" + }, + "Response" : { + "x-envoy-upstream-service-time" : "101", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "ea41e646-345e-4cd9-8557-a48c905c81ee", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyzeresults/8131c98d-7b2c-417d-97d0-e33dd72bae87", + "Date" : "Thu, 22 Oct 2020 04:27:54 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyzeResults/8131c98d-7b2c-417d-97d0-e33dd72bae87", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "946b3e97-807b-4a96-aa2f-046d6d80e007" + }, + "Response" : { + "x-envoy-upstream-service-time" : "37", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "c3ee9f31-5814-4ba8-8c35-07589c913cec", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-22T04:27:54Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:27:58Z\"}", + "Date" : "Thu, 22 Oct 2020 04:27:58 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyzeResults/8131c98d-7b2c-417d-97d0-e33dd72bae87", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "e8c32350-e198-408a-a9e2-26784f6c6e3d" + }, + "Response" : { + "x-envoy-upstream-service-time" : "42", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a2353233-08ee-4a47-8d27-7933c257ec37", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:27:54Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:28:04Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"modelId\":\"17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"pageRange\":[1,1],\"fields\":{\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:28:04 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyzeResults/8131c98d-7b2c-417d-97d0-e33dd72bae87", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "2a33b37b-7643-44d9-a940-8003d2c32b57" + }, + "Response" : { + "x-envoy-upstream-service-time" : "36", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "adcf30c0-c95f-49ad-b3a1-15443645c7b7", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:27:54Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:28:04Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"modelId\":\"17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"pageRange\":[1,1],\"fields\":{\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:28:04 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json new file mode 100644 index 000000000000..a3680b1c14b9 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json @@ -0,0 +1,144 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "49b0720e-bc1f-4b75-a00f-e4f71e7e1dd0", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "67", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "96be5eec-5443-4f29-9f51-8e2fe4bf4bdb", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "Date" : "Thu, 22 Oct 2020 04:44:19 GMT", + "Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "d3a4023f-af18-47eb-9f1d-a9334885177c" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "97", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "2ffefcab-5b96-4d9a-83be-69ae9a4dbaa6", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:44:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:22Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:44:24 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "63cf6efd-bfa5-4ae1-ba1a-b5b0b42e1c2e" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "18", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "15e4ddcd-f123-4361-a849-ccb15375ea89", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:44:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:22Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:44:24 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyze?includeTextDetails=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "4804772a-3ddc-428d-8ee9-979705b38ca6", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "80", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "4e070250-f278-4fbf-b712-4c7741062bdb", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyzeresults/da9b1607-9f2c-4586-bc69-4542df4301df", + "Date" : "Thu, 22 Oct 2020 04:44:24 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyzeResults/da9b1607-9f2c-4586-bc69-4542df4301df", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "5533c7d9-c03b-4e78-8a34-ef5075590eed" + }, + "Response" : { + "x-envoy-upstream-service-time" : "44", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "12b0413e-a4b5-452f-a83c-0038177c746b", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-22T04:44:25Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:28Z\"}", + "Date" : "Thu, 22 Oct 2020 04:44:29 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyzeResults/da9b1607-9f2c-4586-bc69-4542df4301df", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "16f59883-f66b-44ff-89fe-02834ba5cd4a" + }, + "Response" : { + "x-envoy-upstream-service-time" : "149", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "f5c08164-1583-46b5-9cd4-0d1b24c47d1c", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:44:25Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:35Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"modelId\":\"9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"pageRange\":[1,1],\"fields\":{\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:44:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyzeResults/da9b1607-9f2c-4586-bc69-4542df4301df", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "d2788de8-0d91-445c-97bc-ac3df8b14907" + }, + "Response" : { + "x-envoy-upstream-service-time" : "36", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a99fda6d-6305-4984-a196-4f0b641b5382", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:44:25Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:35Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"modelId\":\"9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"pageRange\":[1,1],\"fields\":{\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:44:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/test-resources.json b/sdk/formrecognizer/test-resources.json index 7c1bc6857260..ed538ef22a13 100644 --- a/sdk/formrecognizer/test-resources.json +++ b/sdk/formrecognizer/test-resources.json @@ -71,6 +71,10 @@ "type": "string", "defaultValue": "testingdata" }, + "selectionMarkTrainingDataContainer": { + "type": "string", + "defaultValue": "selectionmark" + }, "testingDataSasProperties": { "type": "object", "defaultValue": { @@ -92,6 +96,15 @@ "signedPermission": "rl", "signedResource": "c" } + }, + "selectionMarkTrainingDataSasProperties": { + "type": "object", + "defaultValue": { + "canonicalizedResource": "[concat('/blob/', parameters('blobStorageAccount'), '/', parameters('selectionMarkTrainingDataContainer'))]", + "signedExpiry": "[dateTimeAdd(utcNow('u'), 'PT2H')]", + "signedPermission": "rl", + "signedResource": "c" + } } }, "variables": { @@ -161,6 +174,10 @@ "type": "string", "value": "[concat(reference(parameters('blobResourceId'), '2019-06-01').primaryEndpoints.blob, parameters('multiPageTestingDataContainer'), '?', listServiceSas(parameters('blobResourceId'), '2019-06-01', parameters('multiPageTestingDataSasProperties')).serviceSasToken)]" }, + "FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL": { + "type": "string", + "value": "[concat(reference(parameters('blobResourceId'), '2019-06-01').primaryEndpoints.blob, parameters('selectionMarkTrainingDataContainer'), '?', listServiceSas(parameters('blobResourceId'), '2019-06-01', parameters('selectionMarkTrainingDataContainer')).serviceSasToken)]" + }, "FORM_RECOGNIZER_TARGET_RESOURCE_REGION": { "type": "string", "value": "[parameters('location')]" From 8928a8d054c8fd0c1048a0f2c3cdd9a7a22b5747 Mon Sep 17 00:00:00 2001 From: Hemant Tanwar Date: Fri, 23 Oct 2020 12:39:13 -0700 Subject: [PATCH 08/24] Binarydata api update - Default json serializer (#16319) Adding BinaryData with serializer support --- sdk/core/azure-core-experimental/CHANGELOG.md | 1 + .../core/experimental/util/BinaryData.java | 276 ++++++++++++------ .../util/BinaryDateJavaDocCodeSnippet.java | 115 +++++++- .../experimental/util/BinaryDataTest.java | 132 +++++++-- 4 files changed, 399 insertions(+), 125 deletions(-) diff --git a/sdk/core/azure-core-experimental/CHANGELOG.md b/sdk/core/azure-core-experimental/CHANGELOG.md index 369cd8bcefe5..9ed249c7810f 100644 --- a/sdk/core/azure-core-experimental/CHANGELOG.md +++ b/sdk/core/azure-core-experimental/CHANGELOG.md @@ -2,6 +2,7 @@ ## 1.0.0-beta.7 (2020-10-08) +- Added API `fromObject()` in `BinaryData` which uses `JsonSerializer` present in the classpath. - Added APIs to `JsonPatchDocument` which accept pre-serialized JSON. - Updated `azure-core` dependency to released version. diff --git a/sdk/core/azure-core-experimental/src/main/java/com/azure/core/experimental/util/BinaryData.java b/sdk/core/azure-core-experimental/src/main/java/com/azure/core/experimental/util/BinaryData.java index 2979599d21ca..060cda67f27b 100644 --- a/sdk/core/azure-core-experimental/src/main/java/com/azure/core/experimental/util/BinaryData.java +++ b/sdk/core/azure-core-experimental/src/main/java/com/azure/core/experimental/util/BinaryData.java @@ -5,7 +5,9 @@ import com.azure.core.util.FluxUtil; import com.azure.core.util.logging.ClientLogger; +import com.azure.core.util.serializer.JsonSerializerProviders; import com.azure.core.util.serializer.ObjectSerializer; +import com.azure.core.util.serializer.JsonSerializer; import com.azure.core.util.serializer.TypeReference; import static com.azure.core.util.FluxUtil.monoError; @@ -18,18 +20,20 @@ import java.io.InputStream; import java.io.UncheckedIOException; import java.nio.ByteBuffer; -import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Objects; /** * This class is an abstraction over many different ways that binary data can be represented. The {@link BinaryData} - * can be created from {@link InputStream}, {@link Flux} of {@link ByteBuffer}, {@link String}, {@link Object} and byte - * array. The data is collected from provided sources and stored into a byte array. + * can be created from {@link InputStream}, {@link Flux} of {@link ByteBuffer}, {@link String}, {@link Object}, or byte + * array. + *

Immutable data

+ * {@link BinaryData} is constructed by copying the given data. Once {@link BinaryData} is instantiated, it can not be + * changed. It provides various convenient APIs to get data out of {@link BinaryData}, they all start with the 'to' + * prefix, for example {@link BinaryData#toBytes()}. *

- * It also provides a way to serialize and deserialize an {@link Object} into {@link BinaryData} given an - * {@link ObjectSerializer}. Code samples are explained below. + * Code samples are presented below. * *

Create an instance from Bytes

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#bytes} @@ -43,57 +47,48 @@ *

Get an Object from {@link BinaryData}

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#ObjectAsync} * + *

Create an instance from Object

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#Object} + * * @see ObjectSerializer + * @see JsonSerializer + * @see
More about serialization */ public final class BinaryData { private static final ClientLogger LOGGER = new ClientLogger(BinaryData.class); - private final byte[] data; + private static final BinaryData EMPTY_DATA = new BinaryData(new byte[0]); - /** - * Create instance of {@link BinaryData} given the data. - * @param data to represent as bytes. - * @throws NullPointerException If {@code data} is null. - */ - BinaryData(byte[] data) { - Objects.requireNonNull(data, "'data' cannot be null."); - this.data = Arrays.copyOf(data, data.length); - } + private static final Object LOCK = new Object(); - /** - * Provides {@link InputStream} for the data represented by this {@link BinaryData} object. - * - *

Get InputStream from BinaryData

- * {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#Stream} - * - * @return {@link InputStream} representing the binary data. - */ - public InputStream toStream() { - return new ByteArrayInputStream(this.data); - } + private final byte[] data; + + private static volatile JsonSerializer defaultJsonSerializer; /** - * Provides {@link Mono} of {@link InputStream} for the data represented by this {@link BinaryData} object. + * Create an instance of {@link BinaryData} from the given data. * - * @return {@link InputStream} representation of the {@link BinaryData}. + * @param data to represent as bytes. */ - public Mono toStreamAsync() { - return Mono.fromCallable(() -> toStream()); + BinaryData(byte[] data) { + this.data = data; } /** - * Create {@link BinaryData} instance with given {@link InputStream} as source of data. The {@link InputStream} is - * not closed by this function. + * Creates a {@link BinaryData} instance with given {@link InputStream} as source of data. The {@link InputStream} + * is not closed by this function. * *

Create an instance from InputStream

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#Stream} * * @param inputStream to read bytes from. * @throws UncheckedIOException If any error in reading from {@link InputStream}. - * @throws NullPointerException if {@code inputStream} is null. + * @throws NullPointerException If {@code inputStream} is null. * @return {@link BinaryData} representing the binary data. */ public static BinaryData fromStream(InputStream inputStream) { - Objects.requireNonNull(inputStream, "'inputStream' cannot be null."); + if (Objects.isNull(inputStream)) { + return EMPTY_DATA; + } final int bufferSize = 1024; try { @@ -103,98 +98,125 @@ public static BinaryData fromStream(InputStream inputStream) { while ((nRead = inputStream.read(data, 0, data.length)) != -1) { dataOutputBuffer.write(data, 0, nRead); } + dataOutputBuffer.flush(); + + return new BinaryData(dataOutputBuffer.toByteArray()); - return fromBytes(dataOutputBuffer.toByteArray()); } catch (IOException ex) { throw LOGGER.logExceptionAsError(new UncheckedIOException(ex)); } } /** - * Asynchronously create {@link BinaryData} instance with given {@link InputStream} as source of data. The - * {@link InputStream} is not closed by this function. + * Asynchronously creates a {@link BinaryData} instance with the given {@link InputStream} as source of data. The + * {@link InputStream} is not closed by this function. If the {@link InputStream} is {@code null}, an empty + * {@link BinaryData} will be returned. * * @param inputStream to read bytes from. - * @throws NullPointerException if {@code inputStream} is null. * @return {@link Mono} of {@link BinaryData} representing the binary data. */ public static Mono fromStreamAsync(InputStream inputStream) { - Objects.requireNonNull(inputStream, "'inputStream' cannot be null."); - return Mono.fromCallable(() -> fromStream(inputStream)); } /** - * Create {@link BinaryData} instance with given {@link Flux} of {@link ByteBuffer} as source of data. It will - * collect all the bytes from {@link ByteBuffer} into {@link BinaryData}. + * Creates a {@link BinaryData} instance with given {@link Flux} of {@link ByteBuffer} as source of data. It will + * collect all the bytes from {@link ByteBuffer} into {@link BinaryData}. If the {@link Flux} is {@code null}, an + * empty {@link BinaryData} will be returned. * *

Create an instance from String

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#Flux} * * @param data to use. - * @throws NullPointerException if {@code inputStream} is null. * @return {@link Mono} of {@link BinaryData} representing binary data. */ public static Mono fromFlux(Flux data) { if (Objects.isNull(data)) { - return monoError(LOGGER, new NullPointerException("'data' cannot be null.")); + return Mono.just(EMPTY_DATA); } return FluxUtil.collectBytesInByteBufferStream(data) - .flatMap(bytes -> Mono.just(fromBytes(bytes))); + .flatMap(bytes -> Mono.just(new BinaryData(bytes))); } /** - * Create {@link BinaryData} instance with given data and character set. - * - *

Create an instance from String

- * {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#String} + * Creates a {@link BinaryData} instance with given data. The {@link String} is converted into bytes using UTF_8 + * character set. If the String is {@code null}, an empty {@link BinaryData} will be returned. * * @param data to use. - * @param charSet to use. - * @throws NullPointerException if {@code inputStream} is null. - * @return {@link BinaryData} representing the binary data. + * @return {@link BinaryData} representing binary data. */ - public static BinaryData fromString(String data, Charset charSet) { - Objects.requireNonNull(data, "'data' cannot be null."); + public static BinaryData fromString(String data) { + if (Objects.isNull(data) || data.length() == 0) { + return EMPTY_DATA; + } - return new BinaryData(data.getBytes(charSet)); + return new BinaryData(data.getBytes(StandardCharsets.UTF_8)); } /** - * Create {@link BinaryData} instance with given data. The {@link String} is converted into bytes using - * {@link StandardCharsets#UTF_8} character set. + * Creates a {@link BinaryData} instance with given byte array data. If the byte array is {@code null}, an empty + * {@link BinaryData} will be returned. * * @param data to use. - * @throws NullPointerException if {@code inputStream} is null. - * @return {@link BinaryData} representing binary data. + * @return {@link BinaryData} representing the binary data. */ - public static BinaryData fromString(String data) { - Objects.requireNonNull(data, "'data' cannot be null."); + public static BinaryData fromBytes(byte[] data) { + if (Objects.isNull(data) || data.length == 0) { + return EMPTY_DATA; + } - return new BinaryData(data.getBytes(StandardCharsets.UTF_8)); + return new BinaryData(Arrays.copyOf(data, data.length)); } /** - * Create {@link BinaryData} instance with given byte array data. + * Serialize the given {@link Object} into {@link BinaryData} using json serializer which is available on classpath. + * The serializer on classpath must implement {@link JsonSerializer} interface. If the given Object is {@code null}, + * an empty {@link BinaryData} will be returned. + *

Code sample

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.from.default.serializer#Object} + + * @param data The {@link Object} which needs to be serialized into bytes. + * @throws IllegalStateException If a {@link JsonSerializer} cannot be found on the classpath. + * @return {@link BinaryData} representing the JSON serialized object. * - * @param data to use. - * @return {@link BinaryData} representing the binary data. + * @see JsonSerializer + * @see More about serialization */ - public static BinaryData fromBytes(byte[] data) { - return new BinaryData(data); + public static BinaryData fromObject(Object data) { + if (Objects.isNull(data)) { + return EMPTY_DATA; + } + final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + getDefaultSerializer().serialize(outputStream, data); + + return new BinaryData(outputStream.toByteArray()); } /** * Serialize the given {@link Object} into {@link BinaryData} using the provided {@link ObjectSerializer}. + * If the Object is {@code null}, an empty {@link BinaryData} will be returned. + *

You can provide your custom implementation of {@link ObjectSerializer} interface or use one provided in azure + * sdk by adding them as dependency. These implementations could be found at + * Json Jackson serializer + * and Gson based serializer. + * + *

Create an instance from Object

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#Object} * * @param data The {@link Object} which needs to be serialized into bytes. * @param serializer to use for serializing the object. - * @throws NullPointerException if {@code inputStream} or {@code serializer} is null. + * @throws NullPointerException If {@code serializer} is null. * @return {@link BinaryData} representing binary data. + * @see ObjectSerializer + * @see JsonSerializer + * @see More about serialization */ public static BinaryData fromObject(Object data, ObjectSerializer serializer) { - Objects.requireNonNull(data, "'data' cannot be null."); + if (Objects.isNull(data)) { + return EMPTY_DATA; + } + Objects.requireNonNull(serializer, "'serializer' cannot be null."); final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); @@ -204,19 +226,25 @@ public static BinaryData fromObject(Object data, ObjectSerializer serializer) { /** * Serialize the given {@link Object} into {@link Mono} {@link BinaryData} using the provided - * {@link ObjectSerializer}. + * {@link ObjectSerializer}. If the Object is {@code null}, an empty {@link BinaryData} will be returned. + * + *

You can provide your custom implementation of {@link ObjectSerializer} interface or use one provided in azure + * sdk by adding them as dependency. These implementations could be found at + * Json Jackson serializer + * and Gson based serializer. * * @param data The {@link Object} which needs to be serialized into bytes. * @param serializer to use for serializing the object. - * @throws NullPointerException if {@code inputStream} or {@code serializer} is null. + * @throws NullPointerException If {@code serializer} is null. * @return {@link Mono} of {@link BinaryData} representing the binary data. + * @see ObjectSerializer + * @see More about serialization */ public static Mono fromObjectAsync(Object data, ObjectSerializer serializer) { - Objects.requireNonNull(data, "'data' cannot be null."); - Objects.requireNonNull(serializer, "'serializer' cannot be null."); - + if (Objects.isNull(serializer)) { + return monoError(LOGGER, new NullPointerException("'serializer' cannot be null.")); + } return Mono.fromCallable(() -> fromObject(data, serializer)); - } /** @@ -230,7 +258,7 @@ public byte[] toBytes() { /** * Provides {@link String} representation of this {@link BinaryData} object. The bytes are converted into - * {@link String} using {@link StandardCharsets#UTF_8} character set. + * {@link String} using the UTF-8 character set. * * @return {@link String} representation of the data. */ @@ -238,23 +266,21 @@ public String toString() { return new String(this.data, StandardCharsets.UTF_8); } - /** - * Provides {@link String} representation of this {@link BinaryData} object given a character set. - * - * @param charSet to use to convert bytes into {@link String}. - * @return {@link String} representation of the the binary data. - */ - public String toString(Charset charSet) { - return new String(this.data, charSet); - } - /** * Deserialize the bytes into the {@link Object} of given type by applying the provided {@link ObjectSerializer} on * the data. * + *

You can provide your custom implementation of {@link ObjectSerializer} interface or use one provided in azure + * sdk by adding them as dependency. These implementations could be found at + * Json Jackson serializer + * and Gson based serializer. + * + *

Code sample

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#Object} * @param clazz representing the type of the Object. * @param serializer to use deserialize data into type. * @param Generic type that the data is deserialized into. + * @throws NullPointerException If {@code serializer} or {@code clazz} is null. * @return The {@link Object} of given type after deserializing the bytes. */ public T toObject(Class clazz, ObjectSerializer serializer) { @@ -267,8 +293,13 @@ public T toObject(Class clazz, ObjectSerializer serializer) { } /** - * Return a {@link Mono} by deserialize the bytes into the {@link Object} of given type after applying the provided - * {@link ObjectSerializer} on the {@link BinaryData}. + * Return a {@link Mono} by deserializing the bytes into the {@link Object} of given type after applying the + * provided {@link ObjectSerializer} on the {@link BinaryData}. + * + *

You can provide your custom implementation of {@link ObjectSerializer} interface or use one provided in azure + * sdk by adding them as dependency. These implementations could be found at + * Json Jackson serializer + * and Gson based serializer. * *

Gets the specified object

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#ObjectAsync} @@ -276,10 +307,77 @@ public T toObject(Class clazz, ObjectSerializer serializer) { * @param clazz representing the type of the Object. * @param serializer to use deserialize data into type. * @param Generic type that the data is deserialized into. - * @throws NullPointerException if {@code clazz} or {@code serializer} is null. + * @throws NullPointerException If {@code clazz} or {@code serializer} is null. * @return The {@link Object} of given type after deserializing the bytes. */ public Mono toObjectAsync(Class clazz, ObjectSerializer serializer) { + + if (Objects.isNull(clazz)) { + return monoError(LOGGER, new NullPointerException("'clazz' cannot be null.")); + } else if (Objects.isNull(serializer)) { + return monoError(LOGGER, new NullPointerException("'serializer' cannot be null.")); + } return Mono.fromCallable(() -> toObject(clazz, serializer)); } + + /** + * Deserialize the bytes into the {@link Object} of given type by using json serializer which is available in + * classpath. The serializer must implement {@link JsonSerializer} interface. A singleton instance of + * {@link JsonSerializer} is kept for this class to use. + * + * @param clazz representing the type of the Object. + * @param Generic type that the data is deserialized into. + * @throws NullPointerException If {@code clazz} is null. + * @return The {@link Object} of given type after deserializing the bytes. + */ + public T toObject(Class clazz) { + Objects.requireNonNull(clazz, "'clazz' cannot be null."); + + TypeReference ref = TypeReference.createInstance(clazz); + InputStream jsonStream = new ByteArrayInputStream(this.data); + return getDefaultSerializer().deserialize(jsonStream, ref); + } + + /** + * Return a {@link Mono} by deserializing the bytes into the {@link Object} of given type after applying the Json + * serializer found on classpath. + * + *

Gets the specified object

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#ObjectAsync} + * + * @param clazz representing the type of the Object. + * @param Generic type that the data is deserialized into. + * @throws NullPointerException If {@code clazz} is null. + * @return The {@link Object} of given type after deserializing the bytes. + */ + public Mono toObjectAsync(Class clazz) { + if (Objects.isNull(clazz)) { + return monoError(LOGGER, new NullPointerException("'clazz' cannot be null.")); + } + return Mono.fromCallable(() -> toObject(clazz)); + } + + /** + * Provides {@link InputStream} for the data represented by this {@link BinaryData} object. + * + *

Get InputStream from BinaryData

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#Stream} + * + * @return {@link InputStream} representing the binary data. + */ + public InputStream toStream() { + return new ByteArrayInputStream(this.data); + } + + /* This will ensure lazy instantiation to avoid hard dependency on Json Serializer. */ + private static JsonSerializer getDefaultSerializer() { + if (defaultJsonSerializer == null) { + synchronized (LOCK) { + if (defaultJsonSerializer == null) { + defaultJsonSerializer = JsonSerializerProviders.createInstance(); + } + } + } + return defaultJsonSerializer; + } } diff --git a/sdk/core/azure-core-experimental/src/samples/java/com/azure/core/experimental/util/BinaryDateJavaDocCodeSnippet.java b/sdk/core/azure-core-experimental/src/samples/java/com/azure/core/experimental/util/BinaryDateJavaDocCodeSnippet.java index d4999b654cf2..a7211d27ca89 100644 --- a/sdk/core/azure-core-experimental/src/samples/java/com/azure/core/experimental/util/BinaryDateJavaDocCodeSnippet.java +++ b/sdk/core/azure-core-experimental/src/samples/java/com/azure/core/experimental/util/BinaryDateJavaDocCodeSnippet.java @@ -58,8 +58,8 @@ public void createFromString() { */ public void createFromStream() { // BEGIN: com.azure.core.experimental.util.BinaryDocument.from#Stream - final byte[] data = "Some Data".getBytes(StandardCharsets.UTF_8); - BinaryData binaryData = BinaryData.fromStream(new ByteArrayInputStream(data)); + final ByteArrayInputStream inputStream = new ByteArrayInputStream("Some Data".getBytes(StandardCharsets.UTF_8)); + BinaryData binaryData = BinaryData.fromStream(inputStream); System.out.println(binaryData.toString()); // END: com.azure.core.experimental.util.BinaryDocument.from#Stream } @@ -88,6 +88,40 @@ public void createFromFlux() throws InterruptedException { // END: com.azure.core.experimental.util.BinaryDocument.from#Flux } + /** + * Codesnippets for {@link BinaryData#fromObject(Object, ObjectSerializer)}. + */ + public void createFromObject() { + // BEGIN: com.azure.core.experimental.util.BinaryDocument.from#Object + // Lets say we have Person object which could be serialized into json. + class Person { + @JsonProperty + private String name; + + @JsonSetter + public Person setName(String name) { + this.name = name; + return this; + } + + @JsonGetter + public String getName() { + return name; + } + } + final Person data = new Person().setName("John"); + + // Provide your custom serializer or use Azure provided serializers. + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-jackson or + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-gson + + final ObjectSerializer serializer = + new MyJsonSerializer(); // Replace this with your Serializer or from above libraries. + BinaryData binaryData = BinaryData.fromObject(data, serializer); + System.out.println(binaryData.toString()); + // END: com.azure.core.experimental.util.BinaryDocument.from#Object + } + /** * Codesnippets for {@link BinaryData#toStream()}. */ @@ -124,8 +158,7 @@ public String getName() { } final Person data = new Person().setName("John"); - // Ensure your classpath have the Serializer to use to serialize object. For example you can use one of - // following library. + // Provide your custom serializer or use Azure provided serializers. // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-jackson or // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-gson @@ -133,7 +166,6 @@ public String getName() { new MyJsonSerializer(); // Replace this with your Serializer BinaryData binaryData = BinaryData.fromObject(data, serializer); - // Lets print the value of BinaryData Disposable subscriber = binaryData .toObjectAsync(Person.class, serializer) .map(person -> { @@ -148,6 +180,78 @@ public String getName() { // END: com.azure.core.experimental.util.BinaryDocument.to#ObjectAsync } + /** + * Codesnippets for {@link BinaryData#toObject(Class, ObjectSerializer)}. + */ + public void createToObject() { + // BEGIN: com.azure.core.experimental.util.BinaryDocument.to#Object + // Lets say we have Person object which could be serialized into json. + class Person { + @JsonProperty + private String name; + + @JsonSetter + public Person setName(String name) { + this.name = name; + return this; + } + + @JsonGetter + public String getName() { + return name; + } + } + final Person data = new Person().setName("John"); + + // Provide your custom serializer or use Azure provided serializers. + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-jackson or + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-gson + + final ObjectSerializer serializer = + new MyJsonSerializer(); // Replace this with your Serializer + BinaryData binaryData = BinaryData.fromObject(data, serializer); + + Person person = binaryData.toObject(Person.class, serializer); + // Lets print the name + System.out.println("Name : " + person.getName()); + + // END: com.azure.core.experimental.util.BinaryDocument.to#Object + } + + /** + * Codesnippets for {@link BinaryData#fromObject(Object)}. + */ + public void createFromObjectDefaultSerializer() { + // BEGIN: com.azure.core.experimental.util.BinaryDocument.from.default.serializer#Object + // Lets say we have Person object which could be serialized into json. + class Person { + @JsonProperty + private String name; + + @JsonSetter + public Person setName(String name) { + this.name = name; + return this; + } + + @JsonGetter + public String getName() { + return name; + } + } + final Person data = new Person().setName("John"); + + // Ensure your classpath have the Serializer to serialize the object which implement implement + // com.azure.core.util.serializer.JsonSerializer interface. + // Or use Azure provided libraries for this. + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-jackson or + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-gson + + BinaryData binaryData = BinaryData.fromObject(data); + System.out.println(binaryData.toString()); + // END: com.azure.core.experimental.util.BinaryDocument.from.default.serializer#Object + } + public static class MyJsonSerializer implements JsonSerializer { private final ClientLogger logger = new ClientLogger(BinaryDataTest.MyJsonSerializer.class); private final ObjectMapper mapper; @@ -192,4 +296,3 @@ public Mono serializeAsync(OutputStream stream, Object value) { } } } - diff --git a/sdk/core/azure-core-experimental/src/test/java/com/azure/core/experimental/util/BinaryDataTest.java b/sdk/core/azure-core-experimental/src/test/java/com/azure/core/experimental/util/BinaryDataTest.java index e0afe19e16d3..157b7d8ea094 100644 --- a/sdk/core/azure-core-experimental/src/test/java/com/azure/core/experimental/util/BinaryDataTest.java +++ b/sdk/core/azure-core-experimental/src/test/java/com/azure/core/experimental/util/BinaryDataTest.java @@ -85,34 +85,75 @@ public void createFromString() { } @Test - public void createFromStringCharSet() { + public void createFromByteArray() { // Arrange - final String expected = "Doe"; + final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); // Act - final BinaryData data = BinaryData.fromString(expected, StandardCharsets.UTF_8); + final BinaryData data = new BinaryData(expected); // Assert - assertArrayEquals(expected.getBytes(), data.toBytes()); - assertEquals(expected, data.toString(StandardCharsets.UTF_8)); + assertArrayEquals(expected, data.toBytes()); } @Test - public void createFromByteArray() { + public void createFromNullStream() throws IOException { // Arrange - final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); + final byte[] expected = new byte[0]; // Act - final BinaryData data = new BinaryData(expected); + BinaryData data = BinaryData.fromStream(null); + final byte[] actual = new byte[0]; + (data.toStream()).read(actual, 0, expected.length); // Assert assertArrayEquals(expected, data.toBytes()); + assertArrayEquals(expected, actual); + } + + @Test + public void createFromNullByteArray() { + // Arrange + final byte[] expected = new byte[0]; + + // Act + BinaryData actual = BinaryData.fromBytes(null); + + // Assert + assertArrayEquals(expected, actual.toBytes()); + } + + @Test + public void createFromNullObject() { + // Arrange + final byte[] expected = new byte[0]; + + // Act + BinaryData actual = BinaryData.fromObject(null); + + // Assert + assertArrayEquals(expected, actual.toBytes()); } @Test public void createFromStream() throws IOException { // Arrange final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); + + // Act + BinaryData data = BinaryData.fromStream(new ByteArrayInputStream(expected)); + final byte[] actual = new byte[expected.length]; + (data.toStream()).read(actual, 0, expected.length); + + // Assert + assertArrayEquals(expected, data.toBytes()); + assertArrayEquals(expected, actual); + } + + @Test + public void createFromEmptyStream() throws IOException { + // Arrange + final byte[] expected = "".getBytes(); final byte[] actual = new byte[expected.length]; // Act @@ -140,7 +181,7 @@ public void createFromFlux() { } @Test - public void createFromStreamAsync() throws IOException { + public void createFromStreamAsync() { // Arrange final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); @@ -152,27 +193,6 @@ public void createFromStreamAsync() throws IOException { .verifyComplete(); } - @Test - public void createToStreamAsync() { - // Arrange - final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); - final BinaryData actual = BinaryData.fromStreamAsync(new ByteArrayInputStream(expected)).block(); - // Act & Assert - StepVerifier.create(actual.toStreamAsync()) - .assertNext(inutStream -> { - byte[] actualBytes = new byte[expected.length]; - - // Act - try { - inutStream.read(actualBytes, 0, expected.length); - } catch (IOException e) { - e.printStackTrace(); - } - Assertions.assertArrayEquals(expected, actualBytes); - }) - .verifyComplete(); - } - @Test public void createFromObjectAsync() { // Arrange @@ -189,6 +209,58 @@ public void createFromObjectAsync() { .verifyComplete(); } + + @Test + public void createFromEmptyString() { + // Arrange + final String expected = ""; + + // Act + final BinaryData data = BinaryData.fromString(expected); + + // Assert + assertArrayEquals(expected.getBytes(), data.toBytes()); + assertEquals(expected, data.toString()); + } + + @Test + public void createFromEmptyByteArray() { + // Arrange + final byte[] expected = new byte[0]; + + // Act + final BinaryData data = BinaryData.fromBytes(expected); + + // Assert + assertArrayEquals(expected, data.toBytes()); + } + + @Test + public void createFromNullString() { + // Arrange + final String expected = null; + + // Arrange & Act + final BinaryData data = BinaryData.fromString(expected); + + // Assert + assertArrayEquals(new byte[0], data.toBytes()); + assertEquals("", data.toString()); + } + + @Test + public void createFromNullByte() { + // Arrange + final byte[] expected = null; + + // Arrange & Act + final BinaryData data = BinaryData.fromBytes(expected); + + // Assert + assertArrayEquals(new byte[0], data.toBytes()); + assertEquals("", data.toString()); + } + public static class MyJsonSerializer implements JsonSerializer { private final ClientLogger logger = new ClientLogger(MyJsonSerializer.class); private final ObjectMapper mapper; From 68b7701b61eb32485c6a6ee0213671ae90dc6c2d Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Fri, 23 Oct 2020 13:26:57 -0700 Subject: [PATCH 09/24] retarget master as the base branch for docs metadata release (#16764) Co-authored-by: scbedd <45376673+scbedd@users.noreply.github.com> --- .../pipelines/templates/steps/docs-metadata-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/common/pipelines/templates/steps/docs-metadata-release.yml b/eng/common/pipelines/templates/steps/docs-metadata-release.yml index 2b57bcf7f413..45f12580f10e 100644 --- a/eng/common/pipelines/templates/steps/docs-metadata-release.yml +++ b/eng/common/pipelines/templates/steps/docs-metadata-release.yml @@ -8,8 +8,8 @@ parameters: ScriptDirectory: eng/common/scripts TargetDocRepoName: '' TargetDocRepoOwner: '' - PRBranchName: 'smoke-test-rdme' - SourceBranchName: 'smoke-test' + PRBranchName: 'master-rdme' + SourceBranchName: 'master' PRLabels: 'auto-merge' ArtifactName: '' Language: '' From 4706edcd7759cbfdcc929bf454b2a0fb9b39936b Mon Sep 17 00:00:00 2001 From: minnieliu Date: Fri, 23 Oct 2020 13:40:55 -0700 Subject: [PATCH 10/24] Stabilize Chat Live Tests (#16766) * Fix failing live chat tests * Remove retry policy * Fix checkstyle * Fix Live tests * Address PR Comments and remove redundant pom configs * Trigger build Co-authored-by: Minnie Liu --- .../pom.xml | 6 ----- .../azure-communication-chat/pom.xml | 6 ----- .../chat/ChatClientTestBase.java | 11 +------- .../chat/ChatThreadAsyncClientTest.java | 27 ++++++++++--------- sdk/communication/tests.yml | 4 ++- 5 files changed, 18 insertions(+), 36 deletions(-) diff --git a/sdk/communication/azure-communication-administration/pom.xml b/sdk/communication/azure-communication-administration/pom.xml index 5bda961599a0..951bea5a2777 100644 --- a/sdk/communication/azure-communication-administration/pom.xml +++ b/sdk/communication/azure-communication-administration/pom.xml @@ -57,12 +57,6 @@ azure-core 1.9.0 - - com.azure - azure-core-http-netty - 1.6.2 - test - com.azure azure-communication-common diff --git a/sdk/communication/azure-communication-chat/pom.xml b/sdk/communication/azure-communication-chat/pom.xml index 2c44b8fc24f5..666eee2cab2d 100644 --- a/sdk/communication/azure-communication-chat/pom.xml +++ b/sdk/communication/azure-communication-chat/pom.xml @@ -51,12 +51,6 @@ azure-communication-administration 1.0.0-beta.3 - - com.azure - azure-core-http-netty - 1.6.2 - test - com.azure azure-core-test diff --git a/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatClientTestBase.java b/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatClientTestBase.java index 8f5b5eb87c58..5e158ff24597 100644 --- a/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatClientTestBase.java +++ b/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatClientTestBase.java @@ -11,16 +11,12 @@ import com.azure.communication.chat.models.*; import com.azure.communication.common.CommunicationUserCredential; import com.azure.core.exception.HttpResponseException; -import com.azure.core.http.policy.FixedDelay; -import com.azure.core.http.policy.RetryPolicy; import com.azure.core.http.HttpClient; import com.azure.core.test.TestBase; import com.azure.core.test.TestMode; import com.azure.core.util.Configuration; import com.azure.core.util.logging.ClientLogger; - -import java.time.Duration; import java.time.ZonedDateTime; import java.time.LocalDateTime; import java.time.ZoneId; @@ -44,8 +40,6 @@ public class ChatClientTestBase extends TestBase { protected static final String CONNSTRING = Configuration.getGlobalConfiguration() .get("COMMUNICATION_SERVICES_CONNECTION_STRING", "pw=="); - protected static final FixedDelay RETRY_STRATEGY = new FixedDelay(3, Duration.ofMillis(1000)); - protected ChatClientBuilder getChatClientBuilder(String token, HttpClient httpClient) { ChatClientBuilder builder = new ChatClientBuilder(); @@ -60,10 +54,7 @@ protected ChatClientBuilder getChatClientBuilder(String token, HttpClient httpCl builder.credential(new CommunicationUserCredential(token)); } - if (interceptorManager.isLiveMode()) { - builder.addPolicy(new RetryPolicy(RETRY_STRATEGY)); - } - else { + if (getTestMode() == TestMode.RECORD) { builder.addPolicy(interceptorManager.getRecordPolicy()); } diff --git a/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatThreadAsyncClientTest.java b/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatThreadAsyncClientTest.java index 4de7058cccc6..ecbf507a668b 100644 --- a/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatThreadAsyncClientTest.java +++ b/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatThreadAsyncClientTest.java @@ -5,6 +5,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -176,8 +178,7 @@ public void canAddListAndRemoveMembersWithResponseAsync(HttpClient httpClient) t } assertTrue(returnedMembers.size() == 4); - }) - .verifyComplete(); + }); for (ChatThreadMember member: options.getMembers()) { StepVerifier.create(chatThreadClient.removeMemberWithResponse(member.getUser())) @@ -408,6 +409,9 @@ public void canSendTypingNotificationWithResponse(HttpClient httpClient) { @ParameterizedTest @MethodSource("com.azure.core.test.TestBase#getHttpClients") + @DisabledIfEnvironmentVariable( + named = "SKIP_LIVE_TEST", + matches = "(?i)(true)") public void canSendThenListReadReceipts(HttpClient httpClient) throws InterruptedException { // Arrange setupTest(httpClient); @@ -431,16 +435,16 @@ public void canSendThenListReadReceipts(HttpClient httpClient) throws Interrupte assertEquals(resp.getStatusCode(), 200); resp.getItems().forEach(item -> returnedReadReceipts.add(item)); }); - - if (interceptorManager.isPlaybackMode()) { - assertTrue(returnedReadReceipts.size() > 0); - checkReadReceiptListContainsMessageId(returnedReadReceipts, messageResponseRef.get().getId()); - } + assertTrue(returnedReadReceipts.size() > 0); + checkReadReceiptListContainsMessageId(returnedReadReceipts, messageResponseRef.get().getId()); }); } @ParameterizedTest @MethodSource("com.azure.core.test.TestBase#getHttpClients") + @DisabledIfEnvironmentVariable( + named = "SKIP_LIVE_TEST", + matches = "(?i)(true)") public void canSendThenListReadReceiptsWithResponse(HttpClient httpClient) throws InterruptedException { // Arrange setupTest(httpClient); @@ -466,12 +470,9 @@ public void canSendThenListReadReceiptsWithResponse(HttpClient httpClient) throw resp.getItems().forEach(item -> returnedReadReceipts.add(item)); }); - if (interceptorManager.isPlaybackMode()) { - assertTrue(returnedReadReceipts.size() > 0); - checkReadReceiptListContainsMessageId(returnedReadReceipts, messageResponseRef.get().getId()); - } - }) - .verifyComplete(); + assertTrue(returnedReadReceipts.size() > 0); + checkReadReceiptListContainsMessageId(returnedReadReceipts, messageResponseRef.get().getId()); + }); } } diff --git a/sdk/communication/tests.yml b/sdk/communication/tests.yml index a35bb4f6fb49..a435579fb140 100644 --- a/sdk/communication/tests.yml +++ b/sdk/communication/tests.yml @@ -9,8 +9,10 @@ jobs: safeName: azurecommunicationadministration - name: azure-communication-chat groupId: com.azure - safeName: azurecommunicationchatclient + safeName: azurecommunicationchat ServiceDirectory: communication EnvVars: AZURE_TEST_MODE: LIVE SKIP_PHONENUMBER_INTEGRATION_TESTS: TRUE + SKIP_LIVE_TEST: TRUE + From 2d43ad8330a634c81444cc10861e3cf2af848438 Mon Sep 17 00:00:00 2001 From: Alan Zimmer <48699787+alzimmermsft@users.noreply.github.com> Date: Fri, 23 Oct 2020 14:26:40 -0700 Subject: [PATCH 11/24] Expose JSON Patch Operations (#16715) * Expose JsonPatchDocument.getOperations, JsonPatchOperation, and JsonPatchOperationKind * Add Immutable annotation to JsonPatchOperation --- .../azure/core/util/JsonPatchDocument.java | 22 ++++++++++--------- .../util/JsonPatchDocumentSerializer.java | 2 +- .../azure/core/util/JsonPatchOperation.java | 14 +++++++----- .../core/util/JsonPatchOperationKind.java | 7 +++++- .../util/JsonPatchOperationSerializer.java | 2 +- .../core/util/JsonPatchDocumentTests.java | 7 ++++++ 6 files changed, 36 insertions(+), 18 deletions(-) diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java index 2fd4f3d7a7f9..7cdb9feff4f1 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java @@ -7,8 +7,7 @@ import com.azure.core.util.serializer.JacksonAdapter; import com.azure.core.util.serializer.JsonSerializer; import com.azure.core.util.serializer.JsonSerializerProviders; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -20,19 +19,15 @@ /** * Represents a JSON Patch document. */ -//@JsonSerialize(using = JsonPatchDocumentSerializer.class) -public class JsonPatchDocument { +@JsonSerialize(using = JsonPatchDocumentSerializer.class) +public final class JsonPatchDocument { private static final Object SERIALIZER_INSTANTIATION_SYNCHRONIZER = new Object(); private static volatile JsonSerializer defaultSerializer; - @JsonIgnore private final ClientLogger logger = new ClientLogger(JsonPatchDocument.class); - @JsonValue - private final List operations; - - @JsonIgnore private final JsonSerializer serializer; + private final List operations; /** * Creates a new JSON Patch document. @@ -53,7 +48,14 @@ public JsonPatchDocument(JsonSerializer serializer) { this.serializer = serializer; } - List getOperations() { + /** + * Gets a representation of the {@link JsonPatchOperation JSON patch operations} in this JSON patch document. + *

+ * Modifications to the returned list won't mutate the operations in the document. + * + * @return The JSON patch operations in this JSON patch document. + */ + public List getOperations() { return new ArrayList<>(operations); } diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java index 31eba6abd7d2..08e0ff8b4a92 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java @@ -13,7 +13,7 @@ /** * Handles serialization of a {@link JsonPatchDocument}. */ -class JsonPatchDocumentSerializer extends JsonSerializer { +final class JsonPatchDocumentSerializer extends JsonSerializer { @Override public void serialize(JsonPatchDocument value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java index cab3bd1528db..f9c6d9d18cf4 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java @@ -3,6 +3,7 @@ package com.azure.core.util; +import com.azure.core.annotation.Immutable; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Objects; @@ -11,8 +12,9 @@ /** * Represents a JSON Patch operation. */ +@Immutable @JsonSerialize(using = JsonPatchOperationSerializer.class) -final class JsonPatchOperation { +public final class JsonPatchOperation { private final JsonPatchOperationKind op; private final String from; private final String path; @@ -41,7 +43,7 @@ final class JsonPatchOperation { * * @return The kind of operation. */ - JsonPatchOperationKind getOp() { + public JsonPatchOperationKind getOp() { return op; } @@ -50,7 +52,7 @@ JsonPatchOperationKind getOp() { * * @return The operation from target path. */ - String getFrom() { + public String getFrom() { return from; } @@ -59,16 +61,18 @@ String getFrom() { * * @return The operation target path. */ - String getPath() { + public String getPath() { return path; } /** * Gets the operation value. + *

+ * If the operation doesn't take a value {@link Option#uninitialized()} will be returned. * * @return The operation value. */ - Option getValue() { + public Option getValue() { return value; } diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java index 57fe594f7bc5..2520e1f15572 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java @@ -8,7 +8,7 @@ /** * Represents the JSON Patch operation kind. */ -enum JsonPatchOperationKind { +public enum JsonPatchOperationKind { /** * Add operation. */ @@ -45,6 +45,11 @@ enum JsonPatchOperationKind { this.op = op; } + /** + * Gets the string representation of the JSON patch operation kind. + * + * @return The string representation of the JSON patch operation kind. + */ @JsonValue public String toString() { return op; diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java index acc60d4dee84..38ae5b5439a4 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java @@ -12,7 +12,7 @@ /** * Handles serialization of a {@link JsonPatchOperation}. */ -class JsonPatchOperationSerializer extends JsonSerializer { +final class JsonPatchOperationSerializer extends JsonSerializer { @Override public void serialize(JsonPatchOperation value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java b/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java index 96e31e26bb4c..e530bd35731e 100644 --- a/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java +++ b/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java @@ -42,6 +42,13 @@ public void jsonifyDocument(JsonPatchDocument document, String expected) throws assertEquals(expected, SERIALIZER.serialize(document, SerializerEncoding.JSON).replace(" ", "")); } + @ParameterizedTest + @MethodSource("formattingSupplier") + public void jsonifyOperations(JsonPatchDocument document, String expected) throws IOException { + assertEquals(expected, SERIALIZER.serialize(document.getOperations(), SerializerEncoding.JSON) + .replace(" ", "")); + } + private static Stream formattingSupplier() { JsonPatchDocument complexDocument = newDocument() .appendTest("/a/b/c", "foo") From 8054a0cdd1d82be77c14df2cdd907880cb8bc3b3 Mon Sep 17 00:00:00 2001 From: Alan Zimmer <48699787+alzimmermsft@users.noreply.github.com> Date: Fri, 23 Oct 2020 15:27:13 -0700 Subject: [PATCH 12/24] Added Custom Deserializers to Handle Interspersed List Responses (#16702) * Added custom serializer to handle PageList response * Add test playback record * Add CustomPageListingDeserializer annotation in Swagger transform * Added RevApi suppression for new annotation on PageList * Fix copy and paste error * Fix Share File range listing deserialization, added more unit testing --- .../src/main/resources/revapi/revapi.json | 5 + sdk/storage/azure-storage-blob/CHANGELOG.md | 2 +- .../azure/storage/blob/models/PageList.java | 3 + .../blob/models/PageListDeserializer.java | 73 +++++ .../blob/specialized/HelperTest.groovy | 29 ++ .../blob/specialized/PageBlobAPITest.groovy | 122 +++++--- .../HelperTestpagelistcustomdeserializer.json | 67 +++++ .../PageBlobAPITestgetpagerangesdiff[0].json | 185 ++++++++++++ .../PageBlobAPITestgetpagerangesdiff[1].json | 210 +++++++++++++ .../PageBlobAPITestgetpagerangesdiff[2].json | 207 +++++++++++++ .../PageBlobAPITestgetpagerangesdiff[3].json | 232 +++++++++++++++ .../PageBlobAPITestgetpagerangesdiff[4].json | 279 ++++++++++++++++++ .../azure-storage-blob/swagger/README.md | 15 + .../azure-storage-file-share/CHANGELOG.md | 1 + .../file/share/models/ShareFileRangeList.java | 2 + .../ShareFileRangeListDeserializer.java | 74 +++++ .../storage/file/share/FileAPITests.groovy | 201 ++++++++----- .../file/share/FileAsyncAPITests.groovy | 152 +++++++--- .../storage/file/share/FileTestHelper.groovy | 36 +++ .../FileAPITestsListRangesDiff0.json | 124 ++++++++ .../FileAPITestsListRangesDiff1.json | 148 ++++++++++ .../FileAPITestsListRangesDiff2.json | 145 +++++++++ .../FileAPITestsListRangesDiff3.json | 169 +++++++++++ .../FileAPITestsListRangesDiff4.json | 214 ++++++++++++++ .../FileAsyncAPITestsListRangesDiff0.json | 124 ++++++++ .../FileAsyncAPITestsListRangesDiff1.json | 148 ++++++++++ .../FileAsyncAPITestsListRangesDiff2.json | 145 +++++++++ .../FileAsyncAPITestsListRangesDiff3.json | 169 +++++++++++ .../FileAsyncAPITestsListRangesDiff4.json | 214 ++++++++++++++ .../swagger/README.md | 15 + 30 files changed, 3344 insertions(+), 166 deletions(-) create mode 100644 sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java create mode 100644 sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json create mode 100644 sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json create mode 100644 sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json create mode 100644 sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json create mode 100644 sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json create mode 100644 sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json create mode 100644 sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json diff --git a/eng/code-quality-reports/src/main/resources/revapi/revapi.json b/eng/code-quality-reports/src/main/resources/revapi/revapi.json index eb8afd82f704..c5ead03aa977 100644 --- a/eng/code-quality-reports/src/main/resources/revapi/revapi.json +++ b/eng/code-quality-reports/src/main/resources/revapi/revapi.json @@ -241,6 +241,11 @@ "old": "class com.azure.messaging.eventhubs.EventHubClientBuilder", "new": "class com.azure.messaging.eventhubs.EventHubClientBuilder", "justification": "Setting protocol to AMQP in @ServiceClientBuilder annotation is not a breaking change" + }, + { + "code": "java.annotation.added", + "new": "class com.azure.storage.blob.models.PageList", + "justification": "Annotation required to resolve deserialization bug." } ] } diff --git a/sdk/storage/azure-storage-blob/CHANGELOG.md b/sdk/storage/azure-storage-blob/CHANGELOG.md index b37dd0b02439..e4d89e6be650 100644 --- a/sdk/storage/azure-storage-blob/CHANGELOG.md +++ b/sdk/storage/azure-storage-blob/CHANGELOG.md @@ -1,7 +1,7 @@ # Release History ## 12.9.0-beta.3 (Unreleased) - +- Fixed a bug where interspersed element types returned by page listing would deserialize incorrectly. ## 12.9.0-beta.2 (2020-10-08) - Added support to specify whether or not a pipeline policy should be added per call or per retry. diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java index 6df08b4bc9af..c2f1729e5b6d 100644 --- a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java +++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java @@ -6,7 +6,9 @@ import com.azure.core.annotation.Fluent; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; + import java.util.ArrayList; import java.util.List; @@ -15,6 +17,7 @@ */ @JacksonXmlRootElement(localName = "PageList") @Fluent +@JsonDeserialize(using = PageListDeserializer.class) public final class PageList { /* * The pageRange property. diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java new file mode 100644 index 000000000000..d2832b599581 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.storage.blob.models; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.JsonTokenId; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.util.ArrayList; + +/** + * Custom Jackson JsonDeserializer that handles deserializing PageList responses. + *

+ * PageList responses intersperse PageRange and ClearRange elements, without this deserializer if we received the + * following response the resulting PageList would only contain one PageRange element and one ClearRange element. + * + *

+ * {@code
+ * 
+ * 
+ *    
+ *       Start Byte
+ *       End Byte
+ *    
+ *    
+ *       Start Byte
+ *       End Byte
+ *    
+ *    
+ *       Start Byte
+ *       End Byte
+ *    
+ * 
+ * }
+ * 
+ * + * With the custom deserializer the response correctly returns two PageRange elements and one ClearRange element. + */ +final class PageListDeserializer extends JsonDeserializer { + @Override + public PageList deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + ArrayList pageRanges = new ArrayList<>(); + ArrayList clearRanges = new ArrayList<>(); + + // Get the deserializer that handles PageRange. + JsonDeserializer pageRangeDeserializer = + ctxt.findRootValueDeserializer(ctxt.constructType(PageRange.class)); + + // Get the deserializer that handles ClearRange. + JsonDeserializer clearRangeDeserializer = + ctxt.findRootValueDeserializer(ctxt.constructType(ClearRange.class)); + + for (JsonToken currentToken = p.nextToken(); currentToken.id() != JsonTokenId.ID_END_OBJECT; + currentToken = p.nextToken()) { + // Get to the root element of the next item. + p.nextToken(); + + if (p.getCurrentName().equals("PageRange")) { + // Current token is the node that begins a PageRange object. + pageRanges.add((PageRange) pageRangeDeserializer.deserialize(p, ctxt)); + } else if (p.getCurrentName().equals("ClearRange")) { + // Current token is the node that begins a ClearRange object. + clearRanges.add((ClearRange) clearRangeDeserializer.deserialize(p, ctxt)); + } + } + + return new PageList().setPageRange(pageRanges).setClearRange(clearRanges); + } +} diff --git a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy index 5fe929e0804f..f4fe36c310be 100644 --- a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy +++ b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy @@ -3,11 +3,14 @@ package com.azure.storage.blob.specialized +import com.azure.core.util.serializer.JacksonAdapter +import com.azure.core.util.serializer.SerializerEncoding import com.azure.storage.blob.APISpec import com.azure.storage.blob.BlobContainerAsyncClient import com.azure.storage.blob.BlobUrlParts import com.azure.storage.blob.implementation.util.BlobSasImplUtil import com.azure.storage.blob.models.BlobRange +import com.azure.storage.blob.models.PageList import com.azure.storage.blob.sas.BlobSasPermission import com.azure.storage.blob.sas.BlobSasServiceVersion import com.azure.storage.blob.sas.BlobServiceSasSignatureValues @@ -142,4 +145,30 @@ class HelperTest extends APISpec { .assertNext(){buffer -> assert buffer.compareTo(ByteBuffer.wrap(data)) == 0 } .verifyComplete() } + + def "PageList custom deserializer"() { + setup: + def responseXml = " \n" + + " \n" + + " \n" + + " 0 \n" + + " 511 \n" + + " \n" + + " \n" + + " 512 \n" + + " 1023 \n" + + " \n" + + " \n" + + " 1024 \n" + + " 2047 \n" + + " \n" + + "" + + when: + def pageList = (PageList) new JacksonAdapter().deserialize(responseXml, PageList.class, SerializerEncoding.XML) + + then: + pageList.getPageRange().size() == 2 + pageList.getClearRange().size() == 1 + } } diff --git a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy index e4973a38e9c8..e593df2d90e6 100644 --- a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy +++ b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy @@ -4,22 +4,25 @@ package com.azure.storage.blob.specialized import com.azure.core.exception.UnexpectedLengthException +import com.azure.core.util.CoreUtils import com.azure.storage.blob.APISpec import com.azure.storage.blob.BlobContainerClient -import com.azure.storage.blob.models.PageBlobCopyIncrementalRequestConditions import com.azure.storage.blob.models.BlobErrorCode import com.azure.storage.blob.models.BlobHttpHeaders import com.azure.storage.blob.models.BlobRange import com.azure.storage.blob.models.BlobRequestConditions import com.azure.storage.blob.models.BlobStorageException +import com.azure.storage.blob.models.ClearRange import com.azure.storage.blob.models.CopyStatusType -import com.azure.storage.blob.options.BlobGetTagsOptions -import com.azure.storage.blob.options.PageBlobCopyIncrementalOptions -import com.azure.storage.blob.options.PageBlobCreateOptions +import com.azure.storage.blob.models.PageBlobCopyIncrementalRequestConditions import com.azure.storage.blob.models.PageBlobRequestConditions import com.azure.storage.blob.models.PageRange import com.azure.storage.blob.models.PublicAccessType import com.azure.storage.blob.models.SequenceNumberActionType +import com.azure.storage.blob.options.BlobGetTagsOptions +import com.azure.storage.blob.options.PageBlobCopyIncrementalOptions +import com.azure.storage.blob.options.PageBlobCreateOptions +import com.azure.storage.common.implementation.Constants import spock.lang.Ignore import spock.lang.Unroll @@ -196,7 +199,7 @@ class PageBlobAPITest extends APISpec { null | null | garbageEtag | null | null | null null | null | null | receivedEtag | null | null null | null | null | null | garbageLeaseID | null - null | null | null | null | null | "\"notfoo\" = 'notbar'" + null | null | null | null | null | "\"notfoo\" = 'notbar'" } def "Create error"() { @@ -756,7 +759,7 @@ class PageBlobAPITest extends APISpec { null | null | garbageEtag | null | null | null null | null | null | receivedEtag | null | null null | null | null | null | garbageLeaseID | null - null | null | null | null | null | "\"notfoo\" = 'notbar'" + null | null | null | null | null | "\"notfoo\" = 'notbar'" } def "Get page ranges error"() { @@ -770,32 +773,81 @@ class PageBlobAPITest extends APISpec { thrown(BlobStorageException) } + @Unroll def "Get page ranges diff"() { setup: - bc.create(PageBlobClient.PAGE_BYTES * 2, true) + bc.create(4 * Constants.MB, true) - bc.uploadPages(new PageRange().setStart(PageBlobClient.PAGE_BYTES).setEnd(PageBlobClient.PAGE_BYTES * 2 - 1), - new ByteArrayInputStream(getRandomByteArray(PageBlobClient.PAGE_BYTES))) + bc.uploadPages(new PageRange().setStart(0).setEnd(4 * Constants.MB - 1), + new ByteArrayInputStream(getRandomByteArray(4 * Constants.MB))) def snapId = bc.createSnapshot().getSnapshotId() - bc.uploadPages(new PageRange().setStart(0).setEnd(PageBlobClient.PAGE_BYTES - 1), - new ByteArrayInputStream(getRandomByteArray(PageBlobClient.PAGE_BYTES))) + rangesToUpdate.forEach({ + bc.uploadPages(it, new ByteArrayInputStream(getRandomByteArray((int) (it.getEnd() - it.getStart()) + 1))) + }) - bc.clearPages(new PageRange().setStart(PageBlobClient.PAGE_BYTES).setEnd(PageBlobClient.PAGE_BYTES * 2 - 1)) + rangesToClear.forEach({ bc.clearPages(it) }) when: - def response = bc.getPageRangesDiffWithResponse(new BlobRange(0, PageBlobClient.PAGE_BYTES * 2), snapId, null, null, null) + def response = bc.getPageRangesDiffWithResponse(new BlobRange(0, 4 * Constants.MB), snapId, null, null, null) then: - response.getValue().getPageRange().size() == 1 - response.getValue().getPageRange().get(0).getStart() == 0 - response.getValue().getPageRange().get(0).getEnd() == PageBlobClient.PAGE_BYTES - 1 - response.getValue().getClearRange().size() == 1 - response.getValue().getClearRange().get(0).getStart() == PageBlobClient.PAGE_BYTES - response.getValue().getClearRange().get(0).getEnd() == PageBlobClient.PAGE_BYTES * 2 - 1 validateBasicHeaders(response.getHeaders()) - Integer.parseInt(response.getHeaders().getValue("x-ms-blob-content-length")) == PageBlobClient.PAGE_BYTES * 2 + response.getValue().getPageRange().size() == expectedPageRanges.size() + response.getValue().getClearRange().size() == expectedClearRanges.size() + + for (def i = 0; i < expectedPageRanges.size(); i++) { + def actualRange = response.getValue().getPageRange().get(i) + def expectedRange = expectedPageRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + for (def i = 0; i < expectedClearRanges.size(); i++) { + def actualRange = response.getValue().getClearRange().get(i) + def expectedRange = expectedClearRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + Integer.parseInt(response.getHeaders().getValue("x-ms-blob-content-length")) == 4 * Constants.MB + + where: + rangesToUpdate | rangesToClear | expectedPageRanges | expectedClearRanges + createPageRanges() | createPageRanges() | createPageRanges() | createClearRanges() + createPageRanges(0, 511) | createPageRanges() | createPageRanges(0, 511) | createClearRanges() + createPageRanges() | createPageRanges(0, 511) | createPageRanges() | createClearRanges(0, 511) + createPageRanges(0, 511) | createPageRanges(512, 1023) | createPageRanges(0, 511) | createClearRanges(512, 1023) + createPageRanges(0, 511, 1024, 1535) | createPageRanges(512, 1023, 1536, 2047) | createPageRanges(0, 511, 1024, 1535) | createClearRanges(512, 1023, 1536, 2047) + } + + static def createPageRanges(long... offsets) { + def pageRanges = [] as List + + if (CoreUtils.isNullOrEmpty(offsets)) { + return pageRanges + } + + for (def i = 0; i < offsets.length / 2; i++) { + pageRanges.add(new PageRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1])) + } + + return pageRanges + } + + static def createClearRanges(long... offsets) { + def clearRanges = [] as List + + if (CoreUtils.isNullOrEmpty(offsets)) { + return clearRanges + } + + for (def i = 0; i < offsets.length / 2; i++) { + clearRanges.add(new ClearRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1])) + } + + return clearRanges } def "Get page ranges diff min"() { @@ -867,7 +919,7 @@ class PageBlobAPITest extends APISpec { null | null | garbageEtag | null | null | null null | null | null | receivedEtag | null | null null | null | null | null | garbageLeaseID | null - null | null | null | null | null | "\"notfoo\" = 'notbar'" + null | null | null | null | null | "\"notfoo\" = 'notbar'" } def "Get page ranges diff error"() { @@ -1178,13 +1230,13 @@ class PageBlobAPITest extends APISpec { bu2.copyIncrementalWithResponse(new PageBlobCopyIncrementalOptions(bc.getBlobUrl(), snapshot).setRequestConditions(mac), null, null).getStatusCode() == 202 where: - modified | unmodified | match | noneMatch | tags - null | null | null | null | null - oldDate | null | null | null | null - null | newDate | null | null | null - null | null | receivedEtag | null | null - null | null | null | garbageEtag | null - null | null | null | null | "\"foo\" = 'bar'" + modified | unmodified | match | noneMatch | tags + null | null | null | null | null + oldDate | null | null | null | null + null | newDate | null | null | null + null | null | receivedEtag | null | null + null | null | null | garbageEtag | null + null | null | null | null | "\"foo\" = 'bar'" } @Unroll @@ -1204,18 +1256,18 @@ class PageBlobAPITest extends APISpec { .setTagsConditions(tags) when: - bu2.copyIncrementalWithResponse(new PageBlobCopyIncrementalOptions(bc.getBlobUrl(), snapshot).setRequestConditions(mac),null, null) + bu2.copyIncrementalWithResponse(new PageBlobCopyIncrementalOptions(bc.getBlobUrl(), snapshot).setRequestConditions(mac), null, null) then: thrown(BlobStorageException) where: - modified | unmodified | match | noneMatch | tags - newDate | null | null | null | null - null | oldDate | null | null | null - null | null | garbageEtag | null | null - null | null | null | receivedEtag | null - null | null | null | null | "\"notfoo\" = 'notbar'" + modified | unmodified | match | noneMatch | tags + newDate | null | null | null | null + null | oldDate | null | null | null + null | null | garbageEtag | null | null + null | null | null | receivedEtag | null + null | null | null | null | "\"notfoo\" = 'notbar'" } def "Start incremental copy error"() { diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json new file mode 100644 index 000000000000..e78a62326efc --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json @@ -0,0 +1,67 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcpagelistcustomdeserializer0983603c0fdf6584964d?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "966b1253-e957-4f27-84fb-c3c9d9cfb539" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D876CD36648A7A", + "Last-Modified" : "Thu, 22 Oct 2020 20:58:22 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "46435c5d-d01e-00f3-80b6-a8e31f000000", + "Date" : "Thu, 22 Oct 2020 20:58:21 GMT", + "x-ms-client-request-id" : "966b1253-e957-4f27-84fb-c3c9d9cfb539" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcpagelistcustomdeserializer&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e38068eb-1e45-4701-848f-4919f2cfeefe" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "4643a2d6-d01e-00f3-51b6-a8e31f000000", + "Body" : "jtcpagelistcustomdeserializerjtcpagelistcustomdeserializer0983603c0fdf6584964dThu, 22 Oct 2020 20:58:22 GMT\"0x8D876CD36648A7A\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Thu, 22 Oct 2020 21:00:23 GMT", + "x-ms-client-request-id" : "e38068eb-1e45-4701-848f-4919f2cfeefe", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcpagelistcustomdeserializer0983603c0fdf6584964d?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a372d6b7-71ea-47d7-8dda-6d87d2ed519d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "4643a2e2-d01e-00f3-59b6-a8e31f000000", + "Date" : "Thu, 22 Oct 2020 21:00:23 GMT", + "x-ms-client-request-id" : "a372d6b7-71ea-47d7-8dda-6d87d2ed519d" + }, + "Exception" : null + } ], + "variables" : [ "jtcpagelistcustomdeserializer0983603c0fdf6584964d" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json new file mode 100644 index 000000000000..a1a912a26659 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json @@ -0,0 +1,185 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d8ace183-1be6-46cf-9013-e4c3da9b923e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A1464F0F", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:51 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c4c5e-c01e-00ce-5c6a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:29:50 GMT", + "x-ms-client-request-id" : "d8ace183-1be6-46cf-9013-e4c3da9b923e" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "5496780e-cb50-41af-af74-80e3a8796ac4" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A16D1110", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:51 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c4cb2-c01e-00ce-216a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:50 GMT", + "x-ms-client-request-id" : "5496780e-cb50-41af-af74-80e3a8796ac4" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e69f7a0f-93be-47b6-a6ff-c6cdf742ac5d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A1774CC0", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:51 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c4cc2-c01e-00ce-316a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:50 GMT", + "x-ms-client-request-id" : "e69f7a0f-93be-47b6-a6ff-c6cdf742ac5d" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a5732c34-8b6f-4c50-a106-40765456c596", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "KLABNSKwPwQ=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "ETag" : "0x8D87781A4E7F5C3", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c4cdf-c01e-00ce-456a-a95639000000", + "x-ms-client-request-id" : "a5732c34-8b6f-4c50-a106-40765456c596" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "ae42281e-c199-4087-b22e-e925d47d15d3" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:29:57.4867608Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A4E7F5C3", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c53e8-c01e-00ce-566a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "x-ms-client-request-id" : "ae42281e-c199-4087-b22e-e925d47d15d3" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0?prevsnapshot=2020-10-23T18%3A29%3A57.4867608Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e68ba305-e8b6-4fbe-a2cc-a0b33ebd1f85" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781A4E7F5C3", + "x-ms-request-id" : "ee1c53fe-c01e-00ce-676a-a95639000000", + "Body" : "", + "x-ms-client-request-id" : "e68ba305-e8b6-4fbe-a2cc-a0b33ebd1f85", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "c5cafb87-bc16-4515-838f-1aff3cce6c5f" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c5432-c01e-00ce-106a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775Fri, 23 Oct 2020 18:29:51 GMT\"0x8D87781A1464F0F\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "x-ms-client-request-id" : "c5cafb87-bc16-4515-838f-1aff3cce6c5f", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "5c5ce396-94be-4687-8080-690a99e4ef3b" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c544a-c01e-00ce-236a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "x-ms-client-request-id" : "5c5ce396-94be-4687-8080-690a99e4ef3b" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775", "javablobgetpagerangesdiff1414537ab5c849b3ff44b0", "ef2297af-747d-4e79-ac2b-9e1896da1144" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json new file mode 100644 index 000000000000..30e4a7ed9e2c --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json @@ -0,0 +1,210 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "25cf2a8e-d21a-4f91-8dbe-930000aa6879" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A52604CF", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c545f-c01e-00ce-356a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:29:57 GMT", + "x-ms-client-request-id" : "25cf2a8e-d21a-4f91-8dbe-930000aa6879" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a1f02e09-4c16-4f1f-a613-84a589658efb" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A52CFED6", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5476-c01e-00ce-466a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:57 GMT", + "x-ms-client-request-id" : "a1f02e09-4c16-4f1f-a613-84a589658efb" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a92fb514-37b9-4df6-b89f-0ee20cc6ec5d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A5342C7E", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5487-c01e-00ce-556a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:57 GMT", + "x-ms-client-request-id" : "a92fb514-37b9-4df6-b89f-0ee20cc6ec5d" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "9cd58e52-0b6d-4b8d-974b-72ff1f336796", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "HKzsv2qN0jc=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:02 GMT", + "ETag" : "0x8D87781A89C6F02", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c54b3-c01e-00ce-796a-a95639000000", + "x-ms-client-request-id" : "9cd58e52-0b6d-4b8d-974b-72ff1f336796" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "813f95c7-3b0e-4937-a7f0-ae8e072769c8" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:30:03.6956707Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A89C6F02", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5ddd-c01e-00ce-6a6a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:30:02 GMT", + "x-ms-client-request-id" : "813f95c7-3b0e-4937-a7f0-ae8e072769c8" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "34f58426-2c6a-480b-a363-6cc5359a19b1", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "PIjD7cc1O88=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:02 GMT", + "ETag" : "0x8D87781A8AFAD8A", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c5e00-c01e-00ce-056a-a95639000000", + "x-ms-client-request-id" : "34f58426-2c6a-480b-a363-6cc5359a19b1" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?prevsnapshot=2020-10-23T18%3A30%3A03.6956707Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "f0026ab8-1a03-4c33-a380-f0ef22c4b5b1" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:30:02 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781A8AFAD8A", + "x-ms-request-id" : "ee1c5e12-c01e-00ce-136a-a95639000000", + "Body" : "0511", + "x-ms-client-request-id" : "f0026ab8-1a03-4c33-a380-f0ef22c4b5b1", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "3363f50a-64b6-4cf7-bd69-944488e8e028" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c5e2a-c01e-00ce-276a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127Fri, 23 Oct 2020 18:29:57 GMT\"0x8D87781A52604CF\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "3363f50a-64b6-4cf7-bd69-944488e8e028", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8f00712a-a24c-41be-b85e-29c1f56db346" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c5e37-c01e-00ce-326a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "8f00712a-a24c-41be-b85e-29c1f56db346" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127", "javablobgetpagerangesdiff115541f331cc6cbd2745dc", "c55fe123-ffa3-48ab-9811-859f9991d7fb", "f7eeeee4-265b-4367-a01b-cd84c150ed83" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json new file mode 100644 index 000000000000..e78d0a87ede8 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json @@ -0,0 +1,207 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0868ce82-a562-437c-a384-a43137148a9a" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A8CBB041", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5e52-c01e-00ce-496a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "0868ce82-a562-437c-a384-a43137148a9a" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "44236b6d-9cb3-4de2-aa4b-6436c68fe838" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A8D23213", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5e61-c01e-00ce-566a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "44236b6d-9cb3-4de2-aa4b-6436c68fe838" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a2427a9c-4eba-419e-b201-3bc28441c425" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A8D89C48", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:04 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5e76-c01e-00ce-666a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "a2427a9c-4eba-419e-b201-3bc28441c425" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "da64ee1e-e915-4076-afe4-d01a65e1f12e", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "4XsU0IKECEc=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:08 GMT", + "ETag" : "0x8D87781AC3A9BB3", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c5e91-c01e-00ce-7b6a-a95639000000", + "x-ms-client-request-id" : "da64ee1e-e915-4076-afe4-d01a65e1f12e" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "ab4776b7-5acb-41fa-907a-2a4b7bfa2241" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:30:09.7634469Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC3A9BB3", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c6875-c01e-00ce-1d6a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:30:08 GMT", + "x-ms-client-request-id" : "ab4776b7-5acb-41fa-907a-2a4b7bfa2241" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "983f8c53-9ecf-46b9-81a6-3012a534b288" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC4C050C", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c688c-c01e-00ce-336a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:08 GMT", + "x-ms-client-request-id" : "983f8c53-9ecf-46b9-81a6-3012a534b288" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?prevsnapshot=2020-10-23T18%3A30%3A09.7634469Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "80a2da27-820a-41ca-9336-6c5ea92644f2" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781AC4C050C", + "x-ms-request-id" : "ee1c689c-c01e-00ce-436a-a95639000000", + "Body" : "0511", + "x-ms-client-request-id" : "80a2da27-820a-41ca-9336-6c5ea92644f2", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8636f340-98e1-40d6-ab18-295f66022566" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c68bd-c01e-00ce-626a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384bFri, 23 Oct 2020 18:30:03 GMT\"0x8D87781A8CBB041\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "8636f340-98e1-40d6-ab18-295f66022566", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "1c5f19c1-249f-498f-94b2-8914b9480300" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c68d5-c01e-00ce-766a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "1c5f19c1-249f-498f-94b2-8914b9480300" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b", "javablobgetpagerangesdiff1196179d8ab59ce69d47ed", "a35d2b8f-23e4-4788-b4c9-92f0b7bafba7" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json new file mode 100644 index 000000000000..3c3d10af29fc --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json @@ -0,0 +1,232 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e883719a-2424-42f7-8dca-f6e48af1b577" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC67E3B9", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c68ee-c01e-00ce-0b6a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "e883719a-2424-42f7-8dca-f6e48af1b577" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "6580cdd2-3eef-42e1-a380-e23e406f518f" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC6E89B2", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:10 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c6901-c01e-00ce-1b6a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "6580cdd2-3eef-42e1-a380-e23e406f518f" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e0a6bad4-5f13-4cdd-a94c-c55bdcee623a" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC7541F4", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:10 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c6920-c01e-00ce-326a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "e0a6bad4-5f13-4cdd-a94c-c55bdcee623a" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "b1bd7265-e5b0-4193-81e9-e9f303cca680", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "yNKI+KPfNUQ=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:14 GMT", + "ETag" : "0x8D87781AFD7B6F0", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c6950-c01e-00ce-5c6a-a95639000000", + "x-ms-client-request-id" : "b1bd7265-e5b0-4193-81e9-e9f303cca680" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "b390e77e-9453-4c63-b7e8-d1b2a736eaf9" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:30:15.8302279Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AFD7B6F0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c733a-c01e-00ce-5f6a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "b390e77e-9453-4c63-b7e8-d1b2a736eaf9" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "18a7c7df-3f79-4bf2-8a78-489473b3687a", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "7cBhePr62ZU=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "ETag" : "0x8D87781AFE9E3C2", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c7344-c01e-00ce-676a-a95639000000", + "x-ms-client-request-id" : "18a7c7df-3f79-4bf2-8a78-489473b3687a" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "b477f3f6-3a6c-4f8b-89aa-1965bced3586" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AFEFB18C", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c7356-c01e-00ce-766a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "b477f3f6-3a6c-4f8b-89aa-1965bced3586" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?prevsnapshot=2020-10-23T18%3A30%3A15.8302279Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "123383b8-f36d-483c-9430-ef57dc0f47d3" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781AFEFB18C", + "x-ms-request-id" : "ee1c736e-c01e-00ce-0a6a-a95639000000", + "Body" : "05115121023", + "x-ms-client-request-id" : "123383b8-f36d-483c-9430-ef57dc0f47d3", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "96294756-3d23-41d4-aafb-3b024d5e6c8d" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c7382-c01e-00ce-196a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895Fri, 23 Oct 2020 18:30:09 GMT\"0x8D87781AC67E3B9\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "96294756-3d23-41d4-aafb-3b024d5e6c8d", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "cd0b7899-15c9-4899-be4e-d69649fd676b" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c738f-c01e-00ce-246a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "cd0b7899-15c9-4899-be4e-d69649fd676b" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895", "javablobgetpagerangesdiff189414bcfecd4ea50f4ff7", "f344e7b0-c396-42b0-bd4b-1d970e75d57a", "fd8c4c6b-b8c6-4cbf-9328-c9e52741ccaf" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json new file mode 100644 index 000000000000..0b035d2e3061 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json @@ -0,0 +1,279 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "5616519c-16d5-4be0-9993-31cde0e36158" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B00B6BD2", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:16 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c73a2-c01e-00ce-366a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "5616519c-16d5-4be0-9993-31cde0e36158" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a666f0a2-dd07-4034-af48-e994ee20630d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B01347C6", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:16 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c73ac-c01e-00ce-3f6a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "a666f0a2-dd07-4034-af48-e994ee20630d" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "c864d31f-85ac-4a29-8e30-f19b79e2135a" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B01C71C1", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:16 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c73cc-c01e-00ce-5b6a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "c864d31f-85ac-4a29-8e30-f19b79e2135a" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "00370d0d-ca07-4f7d-90c8-f8dba82314bc", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "SkN3THoGiP0=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:21 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "ETag" : "0x8D87781B383C9A8", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c73e5-c01e-00ce-6e6a-a95639000000", + "x-ms-client-request-id" : "00370d0d-ca07-4f7d-90c8-f8dba82314bc" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "4af1b117-6092-46c1-9db9-ec23b4e462c5" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:30:21.9920928Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B383C9A8", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:21 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c7d99-c01e-00ce-546a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "4af1b117-6092-46c1-9db9-ec23b4e462c5" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "92fe77b4-c37c-4c9d-863a-5b7b58b8c3d1", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "R+7y7u/mlmU=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "ETag" : "0x8D87781B395CF70", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c7dad-c01e-00ce-676a-a95639000000", + "x-ms-client-request-id" : "92fe77b4-c37c-4c9d-863a-5b7b58b8c3d1" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "9ab62d75-3b70-481b-871f-7c3fc71ed1a0", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "zpW0pVt4+9c=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "ETag" : "0x8D87781B39C60B3", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c7dc8-c01e-00ce-7e6a-a95639000000", + "x-ms-client-request-id" : "9ab62d75-3b70-481b-871f-7c3fc71ed1a0" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "7702fa6d-8ebe-4972-9131-4b5b8604e068" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B3A38E61", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c7dd9-c01e-00ce-0f6a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "7702fa6d-8ebe-4972-9131-4b5b8604e068" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "2f9966ee-c64d-4443-9bcc-82e56b05678f" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B3A9D17E", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c7ddf-c01e-00ce-156a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "2f9966ee-c64d-4443-9bcc-82e56b05678f" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?prevsnapshot=2020-10-23T18%3A30%3A21.9920928Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "11efcea2-b86b-454e-860c-5f8c366fc7e2" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781B3A9D17E", + "x-ms-request-id" : "ee1c7df1-c01e-00ce-256a-a95639000000", + "Body" : "051151210231024153515362047", + "x-ms-client-request-id" : "11efcea2-b86b-454e-860c-5f8c366fc7e2", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "df8cb1ba-7fcc-422e-af2f-ed06d04af5fd" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c7e08-c01e-00ce-386a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411eFri, 23 Oct 2020 18:30:16 GMT\"0x8D87781B00B6BD2\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "df8cb1ba-7fcc-422e-af2f-ed06d04af5fd", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "dcf7bcae-2017-456f-9bab-0e63fac6118f" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c7e1c-c01e-00ce-476a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "dcf7bcae-2017-456f-9bab-0e63fac6118f" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e", "javablobgetpagerangesdiff110215b26d03ead2e94975", "f0b8a9f3-02f0-48f7-9922-1c22951ef40e", "e1054127-05aa-4568-8571-e776cb204c7e", "6dde5b1e-8e0f-4f60-992a-b0c4adcc85d7" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/swagger/README.md b/sdk/storage/azure-storage-blob/swagger/README.md index 70b01c2d531b..0d8b599f815d 100644 --- a/sdk/storage/azure-storage-blob/swagger/README.md +++ b/sdk/storage/azure-storage-blob/swagger/README.md @@ -894,6 +894,21 @@ directive: "@JsonDeserialize(using = CustomHierarchicalListingDeserializer.class)\npublic final class BlobHierarchyListSegment {"); ``` +### Add the PageListDeserializer attribute +``` yaml +directive: +- from: PageList.java + where: $ + transform: > + return $. + replace( + "import com.fasterxml.jackson.annotation.JsonProperty;", + "import com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;"). + replace( + "public final class PageList {", + "@JsonDeserialize(using = PageListDeserializer.class)\npublic final class PageList {"); +``` + ### Add EncryptionKeySha256 to PageBlobUploadPagesFromURLHeaders ``` yaml directive: diff --git a/sdk/storage/azure-storage-file-share/CHANGELOG.md b/sdk/storage/azure-storage-file-share/CHANGELOG.md index 5102f303de8d..3c36c8a58832 100644 --- a/sdk/storage/azure-storage-file-share/CHANGELOG.md +++ b/sdk/storage/azure-storage-file-share/CHANGELOG.md @@ -4,6 +4,7 @@ - Added support to specify whether or not a pipeline policy should be added per call or per retry. - Added support for setting access tier on a share through ShareClient.create, ShareClient.setAccessTier. - Added support for getting access tier on a share through ShareClient.getProperties, ShareServiceClient.listShares +- Fixed a bug where interspersed element types returned by range diff listing would deserialize incorrectly. - Renamed setAccessTier to setProperties and deprecated setQuotaInGb in favor of setProperties. - Renamed DeleteSnapshotsOptionType to ShareSnapshotsDeleteOptionType in ShareClient.delete - Removed ability to create a ShareLeaseClient for a Share or Share Snapshot. This feature has been rescheduled for future release. diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java index cedb2f7987d8..94cc8d543036 100644 --- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java +++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java @@ -6,6 +6,7 @@ import com.azure.core.annotation.Fluent; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import java.util.ArrayList; import java.util.List; @@ -15,6 +16,7 @@ */ @JacksonXmlRootElement(localName = "ShareFileRangeList") @Fluent +@JsonDeserialize(using = ShareFileRangeListDeserializer.class) public final class ShareFileRangeList { /* * The ranges property. diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java new file mode 100644 index 000000000000..a6e912f49a57 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.storage.file.share.models; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.JsonTokenId; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.util.ArrayList; + +/** + * Custom Jackson JsonDeserializer that handles deserializing ShareFileRangeList responses. + *

+ * ShareFileRangeList responses intersperse FileRange and ClearRange elements, without this deserializer if we received + * the following response the resulting ShareFileRangeList would only contain one FileRange element and one ClearRange + * element. + * + *

+ * {@code
+ * 
+ * 
+ *    
+ *       Start Byte
+ *       End Byte
+ *    
+ *    
+ *       Start Byte
+ *       End Byte
+ *    
+ *    
+ *       Start Byte
+ *       End Byte
+ *    
+ * 
+ * }
+ * 
+ * + * With the custom deserializer the response correctly returns two FileRange elements and one ClearRange element. + */ +final class ShareFileRangeListDeserializer extends JsonDeserializer { + @Override + public ShareFileRangeList deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + ArrayList pageRanges = new ArrayList<>(); + ArrayList clearRanges = new ArrayList<>(); + + // Get the deserializer that handles PageRange. + JsonDeserializer pageRangeDeserializer = + ctxt.findRootValueDeserializer(ctxt.constructType(FileRange.class)); + + // Get the deserializer that handles ClearRange. + JsonDeserializer clearRangeDeserializer = + ctxt.findRootValueDeserializer(ctxt.constructType(ClearRange.class)); + + for (JsonToken currentToken = p.nextToken(); currentToken.id() != JsonTokenId.ID_END_OBJECT; + currentToken = p.nextToken()) { + // Get to the root element of the next item. + p.nextToken(); + + if (p.getCurrentName().equals("Range")) { + // Current token is the node that begins a FileRange object. + pageRanges.add((FileRange) pageRangeDeserializer.deserialize(p, ctxt)); + } else if (p.getCurrentName().equals("ClearRange")) { + // Current token is the node that begins a ClearRange object. + clearRanges.add((ClearRange) clearRangeDeserializer.deserialize(p, ctxt)); + } + } + + return new ShareFileRangeList().setRanges(pageRanges).setClearRanges(clearRanges); + } +} diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy index 38cb162e7920..935f2fe1e52e 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy @@ -31,6 +31,16 @@ import java.time.LocalDateTime import java.time.OffsetDateTime import java.time.ZoneOffset +import static com.azure.storage.file.share.FileTestHelper.assertExceptionStatusCodeAndMessage +import static com.azure.storage.file.share.FileTestHelper.assertResponseStatusCode +import static com.azure.storage.file.share.FileTestHelper.compareFiles +import static com.azure.storage.file.share.FileTestHelper.createClearRanges +import static com.azure.storage.file.share.FileTestHelper.createFileRanges +import static com.azure.storage.file.share.FileTestHelper.createRandomFileWithLength +import static com.azure.storage.file.share.FileTestHelper.deleteFilesIfExists +import static com.azure.storage.file.share.FileTestHelper.getRandomBuffer +import static com.azure.storage.file.share.FileTestHelper.getRandomFile + class FileAPITests extends APISpec { ShareFileClient primaryFileClient ShareClient shareClient @@ -53,7 +63,7 @@ class FileAPITests extends APISpec { testMetadata = Collections.singletonMap("testmetadata", "value") httpHeaders = new ShareFileHttpHeaders().setContentLanguage("en") .setContentType("application/octet-stream") - smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet.of(NtfsFileAttributes.NORMAL)) + smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet. of(NtfsFileAttributes.NORMAL)) } def "Get file URL"() { @@ -112,12 +122,12 @@ class FileAPITests extends APISpec { def "Create file"() { expect: - FileTestHelper.assertResponseStatusCode(primaryFileClient.createWithResponse(1024, null, null, null, null, null, null), 201) + assertResponseStatusCode(primaryFileClient.createWithResponse(1024, null, null, null, null, null, null), 201) } def "Create file 4TB"() { expect: - FileTestHelper.assertResponseStatusCode(primaryFileClient.createWithResponse(4 * Constants.TB, null, null, null, null, null, null), 201) + assertResponseStatusCode(primaryFileClient.createWithResponse(4 * Constants.TB, null, null, null, null, null, null), 201) } def "Create file error"() { @@ -126,7 +136,7 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } def "Create file with args fpk"() { @@ -139,7 +149,7 @@ class FileAPITests extends APISpec { def resp = primaryFileClient.createWithResponse(1024, httpHeaders, smbProperties, null, testMetadata, null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 201) + assertResponseStatusCode(resp, 201) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -158,7 +168,7 @@ class FileAPITests extends APISpec { .setFileLastWriteTime(getUTCNow()) def resp = primaryFileClient.createWithResponse(1024, httpHeaders, smbProperties, filePermission, testMetadata, null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 201) + assertResponseStatusCode(resp, 201) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -176,7 +186,7 @@ class FileAPITests extends APISpec { primaryFileClient.createWithResponse(-1, null, null, null, testMetadata, null, null) then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } @Unroll @@ -189,7 +199,7 @@ class FileAPITests extends APISpec { where: filePermissionKey | permission "filePermissionKey" | filePermission - null | new String(FileTestHelper.getRandomBuffer(9 * Constants.KB)) + null | new String(getRandomBuffer(9 * Constants.KB)) } def "Upload and download data"() { @@ -203,9 +213,9 @@ class FileAPITests extends APISpec { def headers = downloadResponse.getDeserializedHeaders() then: - FileTestHelper.assertResponseStatusCode(uploadResponse, 201) - FileTestHelper.assertResponseStatusCode(downloadResponse, 200) - headers.getContentLength() == dataLength + assertResponseStatusCode(uploadResponse, 201) + assertResponseStatusCode(downloadResponse, 200) + headers.getContentLength() == (long) dataLength headers.getETag() headers.getLastModified() headers.getFilePermissionKey() @@ -229,9 +239,9 @@ class FileAPITests extends APISpec { def downloadResponse = primaryFileClient.downloadWithResponse(stream, new ShareFileRange(1, dataLength), true, null, null) then: - FileTestHelper.assertResponseStatusCode(uploadResponse, 201) - FileTestHelper.assertResponseStatusCode(downloadResponse, 206) - downloadResponse.getDeserializedHeaders().getContentLength() == dataLength + assertResponseStatusCode(uploadResponse, 201) + assertResponseStatusCode(downloadResponse, 206) + downloadResponse.getDeserializedHeaders().getContentLength() == (long) dataLength data == stream.toByteArray() } @@ -247,9 +257,9 @@ class FileAPITests extends APISpec { def downloadResponse = primaryFileClient.downloadWithResponse(stream, new ShareFileRange(fileSize - dataLength, fileSize), true, null, null) then: - FileTestHelper.assertResponseStatusCode(uploadResponse, 201) - FileTestHelper.assertResponseStatusCode(downloadResponse, 206) - downloadResponse.getDeserializedHeaders().getContentLength() == dataLength + assertResponseStatusCode(uploadResponse, 201) + assertResponseStatusCode(downloadResponse, 206) + downloadResponse.getDeserializedHeaders().getContentLength() == (long) dataLength } def "Upload data error"() { @@ -258,10 +268,10 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } - def "Upload and clear range" () { + def "Upload and clear range"() { given: def fullInfoString = "please clear the range" def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8)) @@ -279,7 +289,7 @@ class FileAPITests extends APISpec { } } - def "Upload and clear range with args" () { + def "Upload and clear range with args"() { given: def fullInfoString = "please clear the range" def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8)) @@ -297,7 +307,7 @@ class FileAPITests extends APISpec { } } - def "Clear range error" () { + def "Clear range error"() { given: def fullInfoString = "please clear the range" def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8)) @@ -309,10 +319,10 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE) + assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE) } - def "Clear range error args" () { + def "Clear range error args"() { given: def fullInfoString = "please clear the range" def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8)) @@ -324,7 +334,7 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE) + assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE) } @Unroll @@ -341,8 +351,8 @@ class FileAPITests extends APISpec { where: size | errMsg - 6 | "more than" - 8 | "less than" + 6 | "more than" + 8 | "less than" } def "Download data error"() { @@ -351,7 +361,7 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } def "Upload file does not exist"() { @@ -370,12 +380,13 @@ class FileAPITests extends APISpec { ex.getCause() instanceof NoSuchFileException cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } /* * Tests downloading a file using a default client that doesn't have a HttpClient passed to it. */ + @Requires({ liveMode() }) @Unroll def "Download file buffer copy"() { @@ -387,7 +398,7 @@ class FileAPITests extends APISpec { def fileClient = shareServiceClient.getShareClient(shareName) .createFile(filePath, fileSize) - def file = FileTestHelper.getRandomFile(fileSize) + def file = getRandomFile(fileSize) fileClient.uploadFromFile(file.toPath().toString()) def outFile = new File(testResourceName.randomName(methodName, 60) + ".txt") if (outFile.exists()) { @@ -398,7 +409,7 @@ class FileAPITests extends APISpec { fileClient.downloadToFile(outFile.toPath().toString()) then: - FileTestHelper.compareFiles(file, outFile, 0, fileSize) + compareFiles(file, outFile, 0, fileSize) cleanup: shareServiceClient.deleteShare(shareName) @@ -434,7 +445,7 @@ class FileAPITests extends APISpec { ex.getCause() instanceof FileAlreadyExistsException cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload and download to file does not exist"() { @@ -458,7 +469,7 @@ class FileAPITests extends APISpec { scanner.close() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } @Unroll @@ -487,14 +498,14 @@ class FileAPITests extends APISpec { .buildFileClient() client.create(1024) - client.uploadRangeFromUrl(length, destinationOffset, sourceOffset, primaryFileClient.getFileUrl() +"?" + sasToken) + client.uploadRangeFromUrl(length, destinationOffset, sourceOffset, primaryFileClient.getFileUrl() + "?" + sasToken) then: def stream = new ByteArrayOutputStream() client.download(stream) def result = new String(stream.toByteArray()) - for(int i = 0; i < length; i++) { + for (int i = 0; i < length; i++) { result.charAt(destinationOffset + i) == data.charAt(sourceOffset + i) } where: @@ -514,8 +525,8 @@ class FileAPITests extends APISpec { when: SyncPoller poller = primaryFileClient.beginCopy(sourceURL, - null, - null) + null, + null) def pollResponse = poller.poll() @@ -566,13 +577,13 @@ class FileAPITests extends APISpec { when: SyncPoller poller = primaryFileClient.beginCopy("some url", - testMetadata, - null) + testMetadata, + null) poller.waitForCompletion() then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.INVALID_HEADER_VALUE) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.INVALID_HEADER_VALUE) } @Ignore @@ -585,7 +596,7 @@ class FileAPITests extends APISpec { primaryFileClient.createWithResponse(1024, null, null, null, null, null, null) expect: - FileTestHelper.assertResponseStatusCode(primaryFileClient.deleteWithResponse(null, null), 202) + assertResponseStatusCode(primaryFileClient.deleteWithResponse(null, null), 202) } def "Delete file error"() { @@ -594,7 +605,7 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } def "Get properties"() { @@ -607,7 +618,7 @@ class FileAPITests extends APISpec { def resp = primaryFileClient.getPropertiesWithResponse(null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 200) + assertResponseStatusCode(resp, 200) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -639,7 +650,7 @@ class FileAPITests extends APISpec { def resp = primaryFileClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, null, null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 200) + assertResponseStatusCode(resp, 200) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -661,7 +672,7 @@ class FileAPITests extends APISpec { def resp = primaryFileClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, filePermission, null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 200) + assertResponseStatusCode(resp, 200) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -681,7 +692,7 @@ class FileAPITests extends APISpec { primaryFileClient.setPropertiesWithResponse(-1, null, null, null, null, null) then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } def "Set metadata"() { @@ -696,7 +707,7 @@ class FileAPITests extends APISpec { then: testMetadata == getPropertiesBefore.getMetadata() - FileTestHelper.assertResponseStatusCode(setPropertiesResponse, 200) + assertResponseStatusCode(setPropertiesResponse, 200) updatedMetadata == getPropertiesAfter.getMetadata() } @@ -710,14 +721,14 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.EMPTY_METADATA_KEY) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.EMPTY_METADATA_KEY) } def "List ranges"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) expect: @@ -727,14 +738,14 @@ class FileAPITests extends APISpec { } cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges with range"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) expect: @@ -744,14 +755,14 @@ class FileAPITests extends APISpec { } cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges snapshot"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) def snapInfo = shareClient.createSnapshot() @@ -767,14 +778,14 @@ class FileAPITests extends APISpec { } cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges snapshot fail"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) primaryFileClient = fileBuilderHelper(interceptorManager, shareName, filePath) @@ -791,38 +802,64 @@ class FileAPITests extends APISpec { def e = thrown(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } - @Requires( { playbackMode() } ) + @Unroll def "List ranges diff"() { - given: - primaryFileClient.create(1024) - primaryFileClient.uploadWithResponse(new ByteArrayInputStream(FileTestHelper.getRandomBuffer(512)),512, 512, null, null) - def snapInfo = shareClient.createSnapshot() - primaryFileClient.uploadWithResponse(new ByteArrayInputStream(FileTestHelper.getRandomBuffer(512)),512, 0, null, null) - - primaryFileClient.clearRangeWithResponse(512, 512, null, null) + setup: + primaryFileClient.create(4 * Constants.MB) + primaryFileClient.upload(new ByteArrayInputStream(getRandomBuffer(4 * Constants.MB)), 4 * Constants.MB) + def snapshotId = primaryFileServiceClient.getShareClient(primaryFileClient.getShareName()) + .createSnapshot() + .getSnapshot() + + rangesToUpdate.forEach({ + def size = it.getEnd() - it.getStart() + 1 + primaryFileClient.uploadWithResponse(new ByteArrayInputStream(getRandomBuffer((int) size)), size, + it.getStart(), null, null) + }) + + rangesToClear.forEach({ + def size = it.getEnd() - it.getStart() + 1 + primaryFileClient.clearRangeWithResponse(size, it.getStart(), null, null) + }) when: - def response = primaryFileClient.listRangesDiffWithResponse(new ShareFileListRangesDiffOptions(snapInfo.getSnapshot()).setRange(new ShareFileRange(0, 1024)), null, null) + def rangeDiff = primaryFileClient.listRangesDiff(snapshotId) then: - response.getValue().getRanges().size() == 1 - response.getValue().getRanges().get(0).getStart() == 0 - response.getValue().getRanges().get(0).getEnd() == 511 - response.getValue().getClearRanges().size() == 1 - response.getValue().getClearRanges().get(0).getStart() == 512 - response.getValue().getClearRanges().get(0).getEnd() == 1023 - validateBasicHeaders(response.getHeaders()) - Integer.parseInt(response.getHeaders().getValue("x-ms-content-length")) == 1024 + rangeDiff.getRanges().size() == expectedRanges.size() + rangeDiff.getClearRanges().size() == expectedClearRanges.size() + + for (def i = 0; i < expectedRanges.size(); i++) { + def actualRange = rangeDiff.getRanges().get(i) + def expectedRange = expectedRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + for (def i = 0; i < expectedClearRanges.size(); i++) { + def actualRange = rangeDiff.getClearRanges().get(i) + def expectedRange = expectedClearRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + where: + rangesToUpdate | rangesToClear | expectedRanges | expectedClearRanges + createFileRanges() | createFileRanges() | createFileRanges() | createClearRanges() + createFileRanges(0, 511) | createFileRanges() | createFileRanges(0, 511) | createClearRanges() + createFileRanges() | createFileRanges(0, 511) | createFileRanges() | createClearRanges(0, 511) + createFileRanges(0, 511) | createFileRanges(512, 1023) | createFileRanges(0, 511) | createClearRanges(512, 1023) + createFileRanges(0, 511, 1024, 1535) | createFileRanges(512, 1023, 1536, 2047) | createFileRanges(0, 511, 1024, 1535) | createClearRanges(512, 1023, 1536, 2047) } def "List ranges diff with range"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024 + dataLength) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) def snapInfo = shareClient.createSnapshot() @@ -837,15 +874,15 @@ class FileAPITests extends APISpec { range.getEnd() == 1026 cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } - @Requires( { playbackMode() } ) + @Requires({ playbackMode() }) def "List ranges diff lease"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024 + dataLength) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) def snapInfo = shareClient.createSnapshot() @@ -861,14 +898,14 @@ class FileAPITests extends APISpec { range.getEnd() == 1030 cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges diff lease fail"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024 + dataLength) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) def snapInfo = shareClient.createSnapshot() @@ -882,15 +919,15 @@ class FileAPITests extends APISpec { thrown(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } - @Requires( { playbackMode() } ) + @Requires({ playbackMode() }) def "List ranges diff fail"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) when: @@ -900,7 +937,7 @@ class FileAPITests extends APISpec { thrown(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List handles"() { diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy index c1c29ac8c2d8..df527fc925a3 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy @@ -33,6 +33,8 @@ import java.time.LocalDateTime import java.time.OffsetDateTime import java.time.ZoneOffset +import static com.azure.storage.file.share.FileTestHelper.* + class FileAsyncAPITests extends APISpec { ShareFileAsyncClient primaryFileAsyncClient ShareClient shareClient @@ -52,7 +54,7 @@ class FileAsyncAPITests extends APISpec { testMetadata = Collections.singletonMap("testmetadata", "value") httpHeaders = new ShareFileHttpHeaders().setContentLanguage("en") .setContentType("application/octet-stream") - smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet.of(NtfsFileAttributes.NORMAL)) + smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet. of(NtfsFileAttributes.NORMAL)) } def "Get file URL"() { @@ -71,7 +73,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.createWithResponse(1024, null, null, null, null)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) }.verifyComplete() } @@ -81,7 +83,7 @@ class FileAsyncAPITests extends APISpec { then: createFileErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } } @@ -95,7 +97,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.createWithResponse(1024, httpHeaders, smbProperties, null, testMetadata)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) assert it.getValue().getLastModified() assert it.getValue().getSmbProperties() assert it.getValue().getSmbProperties().getFilePermissionKey() @@ -116,7 +118,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.createWithResponse(1024, httpHeaders, smbProperties, filePermission, testMetadata)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) assert it.getValue().getLastModified() assert it.getValue().getSmbProperties() assert it.getValue().getSmbProperties().getFilePermissionKey() @@ -135,7 +137,7 @@ class FileAsyncAPITests extends APISpec { then: createFileErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } } @@ -168,6 +170,7 @@ class FileAsyncAPITests extends APISpec { /* * Tests downloading a file using a default client that doesn't have a HttpClient passed to it. */ + @Requires({ liveMode() }) @Unroll def "Download file buffer copy"() { @@ -179,7 +182,7 @@ class FileAsyncAPITests extends APISpec { def fileClient = shareServiceAsyncClient.getShareAsyncClient(shareName) .createFile(filePath, fileSize).block() - def file = FileTestHelper.getRandomFile(fileSize) + def file = getRandomFile(fileSize) fileClient.uploadFromFile(file.toPath().toString()).block() def outFile = new File(testResourceName.randomName(methodName, 60) + ".txt") if (outFile.exists()) { @@ -190,7 +193,7 @@ class FileAsyncAPITests extends APISpec { fileClient.downloadToFile(outFile.toPath().toString()).block() then: - FileTestHelper.compareFiles(file, outFile, 0, fileSize) + compareFiles(file, outFile, 0, fileSize) cleanup: shareServiceAsyncClient.deleteShare(shareName).block() @@ -216,11 +219,11 @@ class FileAsyncAPITests extends APISpec { then: uploadVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) }.verifyComplete() downloadVerifier.assertNext({ response -> - assert FileTestHelper.assertResponseStatusCode(response, 200) + assert assertResponseStatusCode(response, 200) def headers = response.getDeserializedHeaders() assert headers.getContentLength() == defaultDataLength assert headers.getETag() @@ -252,14 +255,14 @@ class FileAsyncAPITests extends APISpec { then: uploadVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) }.verifyComplete() downloadVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 206) + assert assertResponseStatusCode(it, 206) assert it.getDeserializedHeaders().getContentLength() == defaultDataLength FluxUtil.collectBytesInByteBufferStream(it.getValue()) - .flatMap({ data -> assert data == defaultData.array()}) + .flatMap({ data -> assert data == defaultData.array() }) }.verifyComplete() cleanup: @@ -272,7 +275,7 @@ class FileAsyncAPITests extends APISpec { then: updateDataErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assert assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } cleanup: @@ -335,7 +338,7 @@ class FileAsyncAPITests extends APISpec { then: downloadDataErrorVerifier.verifyErrorSatisfies({ - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assert assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) }) } @@ -376,7 +379,7 @@ class FileAsyncAPITests extends APISpec { then: clearRangeVerifier.assertNext { - FileTestHelper.assertResponseStatusCode(it, 201) + assertResponseStatusCode(it, 201) }.verifyComplete() downloadResponseVerifier.assertNext { @@ -402,7 +405,7 @@ class FileAsyncAPITests extends APISpec { then: clearRangeVerifier.assertNext { - FileTestHelper.assertResponseStatusCode(it, 201) + assertResponseStatusCode(it, 201) }.verifyComplete() downloadResponseVerifier.assertNext { @@ -430,7 +433,7 @@ class FileAsyncAPITests extends APISpec { then: clearRangeErrorVerifier.verifyErrorSatisfies { - FileTestHelper.assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE) + assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE) } } @@ -446,7 +449,7 @@ class FileAsyncAPITests extends APISpec { then: clearRangeErrorVerifier.verifyErrorSatisfies { - FileTestHelper.assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE) + assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE) } cleanup: @@ -492,7 +495,7 @@ class FileAsyncAPITests extends APISpec { uploadFromFileErrorVerifier.verifyErrorSatisfies({ it instanceof NoSuchFileException }) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload and download file exists"() { @@ -516,7 +519,7 @@ class FileAsyncAPITests extends APISpec { downloadToFileErrorVerifier.verifyErrorSatisfies({ it instanceof FileAlreadyExistsException }) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload and download to file does not exist"() { @@ -543,7 +546,7 @@ class FileAsyncAPITests extends APISpec { scanner.close() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload from file lease"() { @@ -551,7 +554,7 @@ class FileAsyncAPITests extends APISpec { primaryFileAsyncClient.create(1024).block() def leaseId = createLeaseClient(primaryFileAsyncClient).acquireLease().block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) when: def verifier = StepVerifier.create(primaryFileAsyncClient.uploadFromFile(uploadFile, new ShareRequestConditions().setLeaseId(leaseId))) @@ -560,7 +563,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload from file lease fail"() { @@ -568,7 +571,7 @@ class FileAsyncAPITests extends APISpec { primaryFileAsyncClient.create(defaultDataLength).block() createLeaseClient(primaryFileAsyncClient).acquireLease().block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) when: @@ -579,7 +582,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyError(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Download to file lease"() { @@ -598,7 +601,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Download to file lease fail"() { @@ -616,7 +619,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyError(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload range from URL"() { @@ -688,7 +691,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload range from URL lease fail"() { @@ -722,7 +725,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyError(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Start copy"() { @@ -846,7 +849,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.deleteWithResponse()) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 202) + assert assertResponseStatusCode(it, 202) }.verifyComplete() } @@ -856,7 +859,7 @@ class FileAsyncAPITests extends APISpec { then: deleteFileErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assert assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } } @@ -868,7 +871,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.deleteWithResponse(new ShareRequestConditions().setLeaseId(leaseId))) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 202) + assert assertResponseStatusCode(it, 202) }.verifyComplete() } @@ -891,7 +894,7 @@ class FileAsyncAPITests extends APISpec { then: getPropertiesVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 200) + assert assertResponseStatusCode(it, 200) assert it.getValue().getETag() assert it.getValue().getLastModified() assert it.getValue().getLastModified() @@ -952,7 +955,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, null)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 200) + assert assertResponseStatusCode(it, 200) assert it.getValue().getSmbProperties() assert it.getValue().getSmbProperties().getFilePermissionKey() assert it.getValue().getSmbProperties().getNtfsFileAttributes() @@ -973,7 +976,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, filePermission)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 200) + assert assertResponseStatusCode(it, 200) assert it.getValue().getSmbProperties() assert it.getValue().getSmbProperties().getFilePermissionKey() assert it.getValue().getSmbProperties().getNtfsFileAttributes() @@ -1015,7 +1018,7 @@ class FileAsyncAPITests extends APISpec { then: setHttpHeaderVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } } @@ -1034,7 +1037,7 @@ class FileAsyncAPITests extends APISpec { assert testMetadata == it.getMetadata() }.verifyComplete() setPropertiesVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 200) + assert assertResponseStatusCode(it, 200) }.verifyComplete() getPropertiesAfterVerifier.assertNext { assert updatedMetadata == it.getMetadata() @@ -1051,7 +1054,7 @@ class FileAsyncAPITests extends APISpec { then: setMetadataErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.EMPTY_METADATA_KEY) + assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.EMPTY_METADATA_KEY) } } @@ -1087,7 +1090,7 @@ class FileAsyncAPITests extends APISpec { given: primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileAsyncClient.uploadFromFile(uploadFile).block() expect: @@ -1098,14 +1101,14 @@ class FileAsyncAPITests extends APISpec { }.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges with range"() { given: primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileAsyncClient.uploadFromFile(uploadFile).block() expect: @@ -1116,14 +1119,14 @@ class FileAsyncAPITests extends APISpec { }.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges lease"() { given: primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileAsyncClient.uploadFromFile(uploadFile).block() def leaseId = createLeaseClient(primaryFileAsyncClient).acquireLease().block() @@ -1132,14 +1135,14 @@ class FileAsyncAPITests extends APISpec { .expectNextCount(1).verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges lease fail"() { given: primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileAsyncClient.uploadFromFile(uploadFile).block() createLeaseClient(primaryFileAsyncClient).acquireLease().block() @@ -1148,7 +1151,60 @@ class FileAsyncAPITests extends APISpec { .verifyError(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) + } + + @Unroll + def "List ranges diff"() { + setup: + def snapshotId = primaryFileAsyncClient.create(4 * Constants.MB) + .then(primaryFileAsyncClient.upload(Flux.just(getRandomByteBuffer(4 * Constants.MB)), 4 * Constants.MB)) + .then(primaryFileServiceAsyncClient.getShareAsyncClient(primaryFileAsyncClient.getShareName()) + .createSnapshot() + .map({ it.getSnapshot() })) + .block() + + Flux.fromIterable(rangesToUpdate) + .flatMap({ + def size = it.getEnd() - it.getStart() + 1 + primaryFileAsyncClient.uploadWithResponse(Flux.just(getRandomByteBuffer((int) size)), size, it.getStart()) + }).blockLast() + + Flux.fromIterable(rangesToClear) + .flatMap({ + primaryFileAsyncClient.clearRangeWithResponse(it.getEnd() - it.getStart() + 1, it.getStart()) + }) + .blockLast() + + expect: + StepVerifier.create(primaryFileAsyncClient.listRangesDiff(snapshotId)) + .assertNext({ + it.getRanges().size() == expectedRanges.size() + it.getClearRanges().size() == expectedClearRanges.size() + + for (def i = 0; i < expectedRanges.size(); i++) { + def actualRange = it.getRanges().get(i) + def expectedRange = expectedRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + for (def i = 0; i < expectedClearRanges.size(); i++) { + def actualRange = it.getClearRanges().get(i) + def expectedRange = expectedClearRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + }) + .verifyComplete() + + where: + rangesToUpdate | rangesToClear | expectedRanges | expectedClearRanges + createFileRanges() | createFileRanges() | createFileRanges() | createClearRanges() + createFileRanges(0, 511) | createFileRanges() | createFileRanges(0, 511) | createClearRanges() + createFileRanges() | createFileRanges(0, 511) | createFileRanges() | createClearRanges(0, 511) + createFileRanges(0, 511) | createFileRanges(512, 1023) | createFileRanges(0, 511) | createClearRanges(512, 1023) + createFileRanges(0, 511, 1024, 1535) | createFileRanges(512, 1023, 1536, 2047) | createFileRanges(0, 511, 1024, 1535) | createClearRanges(512, 1023, 1536, 2047) } def "List handles"() { @@ -1187,7 +1243,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.forceCloseHandle("invalidHandleId")) - .verifyErrorSatisfies({ it instanceof ShareStorageException }) + .verifyErrorSatisfies({ it instanceof ShareStorageException }) } def "Force close all handles min"() { diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy index db4f916cabce..a2cb7721d1ab 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy @@ -4,8 +4,11 @@ package com.azure.storage.file.share import com.azure.core.http.rest.Response +import com.azure.core.util.CoreUtils import com.azure.core.util.logging.ClientLogger import com.azure.storage.common.implementation.Constants +import com.azure.storage.file.share.models.ClearRange +import com.azure.storage.file.share.models.FileRange import com.azure.storage.file.share.models.ShareCorsRule import com.azure.storage.file.share.models.ShareErrorCode import com.azure.storage.file.share.models.ShareItem @@ -14,6 +17,7 @@ import com.azure.storage.file.share.models.ShareRetentionPolicy import com.azure.storage.file.share.models.ShareServiceProperties import com.azure.storage.file.share.models.ShareStorageException +import java.nio.ByteBuffer import java.nio.file.Files import java.nio.file.Path @@ -178,6 +182,10 @@ class FileTestHelper { return file } + static ByteBuffer getRandomByteBuffer(int length) { + return ByteBuffer.wrap(getRandomBuffer(length)) + } + // TODO : Move this into a common package test class? static byte[] getRandomBuffer(int length) { final Random randGenerator = new Random() @@ -219,4 +227,32 @@ class FileTestHelper { stream2.close() } } + + static def createFileRanges(long ... offsets) { + def fileRanges = [] as List + + if (CoreUtils.isNullOrEmpty(offsets)) { + return fileRanges + } + + for (def i = 0; i < offsets.length / 2; i++) { + fileRanges.add(new FileRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1])) + } + + return fileRanges + } + + static def createClearRanges(long ... offsets) { + def clearRanges = [] as List + + if (CoreUtils.isNullOrEmpty(offsets)) { + return clearRanges + } + + for (def i = 0; i < offsets.length / 2; i++) { + clearRanges.add(new ClearRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1])) + } + + return clearRanges + } } diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json new file mode 100644 index 000000000000..2a9b960ce33e --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json @@ -0,0 +1,124 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e792dd6c-e987-4c92-8ab9-2c35df85a857" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ACEBEA2F0", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:33 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd11-601a-0004-1c73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:32 GMT", + "x-ms-client-request-id" : "e792dd6c-e987-4c92-8ab9-2c35df85a857" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044/fileapitestslistrangesdiff0917599b270cd1e34646", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a9a5800f-76fc-42f1-8aca-78e61abb4e63" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:35:33.4561852Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:33 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:32 GMT", + "ETag" : "0x8D8778ACEF94C3C", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:35:33.4561852Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd14-601a-0004-1d73-a9c5f4000000", + "x-ms-client-request-id" : "a9a5800f-76fc-42f1-8aca-78e61abb4e63", + "x-ms-file-last-write-time" : "2020-10-23T19:35:33.4561852Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044/fileapitestslistrangesdiff0917599b270cd1e34646?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "fff0abc7-171e-4f96-916c-a8c74df3020f", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD2B9FF6A", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:39 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd16-601a-0004-1e73-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:39 GMT", + "x-ms-client-request-id" : "fff0abc7-171e-4f96-916c-a8c74df3020f", + "Content-MD5" : "MgQDh41UFaq3Gg+VfMUSbQ==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "7d93098d-f6ad-4720-9977-3dc96a40d2d6" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:35:40.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ACEBEA2F0", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:33 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd1f-601a-0004-2173-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:41 GMT", + "x-ms-client-request-id" : "7d93098d-f6ad-4720-9977-3dc96a40d2d6" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044/fileapitestslistrangesdiff0917599b270cd1e34646?prevsharesnapshot=2020-10-23T19%3A35%3A40.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8b8f04f7-a5ce-4724-bcfc-a2146462b5f0" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:39 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:35:42 GMT", + "ETag" : "0x8D8778AD2B9FF6A", + "x-ms-request-id" : "0b80fd23-601a-0004-2373-a9c5f4000000", + "Body" : "", + "x-ms-client-request-id" : "8b8f04f7-a5ce-4724-bcfc-a2146462b5f0", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff0971801727945a710044", "fileapitestslistrangesdiff0917599b270cd1e34646" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json new file mode 100644 index 000000000000..4ad6595fe2f0 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json @@ -0,0 +1,148 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "de075f54-5bc7-4fa6-bb3a-2bc228ce2464" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD4C608C0", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:43 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd25-601a-0004-2473-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:42 GMT", + "x-ms-client-request-id" : "de075f54-5bc7-4fa6-bb3a-2bc228ce2464" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "24c4bc70-6df9-4b72-827f-f6a9fcb5b92c" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:35:43.2515840Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:43 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:42 GMT", + "ETag" : "0x8D8778AD4CFF500", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:35:43.2515840Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd27-601a-0004-2573-a9c5f4000000", + "x-ms-client-request-id" : "24c4bc70-6df9-4b72-827f-f6a9fcb5b92c", + "x-ms-file-last-write-time" : "2020-10-23T19:35:43.2515840Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "c14e3f84-2e5b-4e92-8c2b-43380fbd0c37", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD85193E9", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd28-601a-0004-2673-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "x-ms-client-request-id" : "c14e3f84-2e5b-4e92-8c2b-43380fbd0c37", + "Content-MD5" : "2it+8RrlSjbf0Nji0z53pA==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "aff54343-7cf5-418c-80dd-ef48ed6b54cc" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:35:49.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD4C608C0", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:43 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd35-601a-0004-2973-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "x-ms-client-request-id" : "aff54343-7cf5-418c-80dd-ef48ed6b54cc" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "04eafe15-8807-4305-ab3a-7526ed405c67", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD86807A3", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd38-601a-0004-2a73-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "x-ms-client-request-id" : "04eafe15-8807-4305-ab3a-7526ed405c67", + "Content-MD5" : "RykPAEIXETChfv9QuDbC+w==" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41?prevsharesnapshot=2020-10-23T19%3A35%3A49.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d3918e72-cd22-4d4d-b27d-0e02ff3a0839" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "ETag" : "0x8D8778AD86807A3", + "x-ms-request-id" : "0b80fd39-601a-0004-2b73-a9c5f4000000", + "Body" : "0511", + "x-ms-client-request-id" : "d3918e72-cd22-4d4d-b27d-0e02ff3a0839", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff1319141ec76abaf1be42", "fileapitestslistrangesdiff117588ed300b26df5b41" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json new file mode 100644 index 000000000000..7d794c632bd9 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json @@ -0,0 +1,145 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "fc0d2430-55b1-45ab-83d8-7eb615cbec4e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD888BB85", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd3b-601a-0004-2c73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "x-ms-client-request-id" : "fc0d2430-55b1-45ab-83d8-7eb615cbec4e" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "787ce6e1-09cc-411b-affc-7ec6023d4de8" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:35:49.5606402Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "ETag" : "0x8D8778AD892A482", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:35:49.5606402Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd3d-601a-0004-2d73-a9c5f4000000", + "x-ms-client-request-id" : "787ce6e1-09cc-411b-affc-7ec6023d4de8", + "x-ms-file-last-write-time" : "2020-10-23T19:35:49.5606402Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e981af9c-88a9-41dc-a567-6d95a0d9f832", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADC1358D1", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd3e-601a-0004-2e73-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:54 GMT", + "x-ms-client-request-id" : "e981af9c-88a9-41dc-a567-6d95a0d9f832", + "Content-MD5" : "Q2Vj31zCIHQI23xIHDX31g==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a0e97407-e7f1-47f2-b9e0-a51aa0a4b0b1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:35:55.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD888BB85", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd46-601a-0004-3073-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:54 GMT", + "x-ms-client-request-id" : "a0e97407-e7f1-47f2-b9e0-a51aa0a4b0b1" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "13312b50-cc36-455b-840b-8a8158780a6e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADC32F687", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd48-601a-0004-3273-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:54 GMT", + "x-ms-client-request-id" : "13312b50-cc36-455b-840b-8a8158780a6e" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43?prevsharesnapshot=2020-10-23T19%3A35%3A55.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "3ef484e4-e96a-4ff4-ba44-44bd5dda04d0" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:35:54 GMT", + "ETag" : "0x8D8778ADC32F687", + "x-ms-request-id" : "0b80fd49-601a-0004-3373-a9c5f4000000", + "Body" : "0511", + "x-ms-client-request-id" : "3ef484e4-e96a-4ff4-ba44-44bd5dda04d0", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff2222061495944aac5046", "fileapitestslistrangesdiff208495e147e9cf965f43" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json new file mode 100644 index 000000000000..f2eee160fc07 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json @@ -0,0 +1,169 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d2901544-75a0-44ac-a773-9c5bf9d83790" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADC52C39A", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd4b-601a-0004-3473-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:55 GMT", + "x-ms-client-request-id" : "d2901544-75a0-44ac-a773-9c5bf9d83790" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "7a7a6d53-1c5e-45d6-9e72-494488834d80" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:35:55.9107350Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:55 GMT", + "ETag" : "0x8D8778ADC5B9716", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:35:55.9107350Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd4d-601a-0004-3573-a9c5f4000000", + "x-ms-client-request-id" : "7a7a6d53-1c5e-45d6-9e72-494488834d80", + "x-ms-file-last-write-time" : "2020-10-23T19:35:55.9107350Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a30d4c60-9504-48c3-b1d7-c14455bec7b2", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADFD2D337", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd4f-601a-0004-3773-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "a30d4c60-9504-48c3-b1d7-c14455bec7b2", + "Content-MD5" : "ZwbgIHaMJ41wNdywuwKuEA==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "334f1d3b-c2a1-48e9-9481-176799ab96ad" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:36:01.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADC52C39A", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd5a-601a-0004-3a73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "334f1d3b-c2a1-48e9-9481-176799ab96ad" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "86f54045-0990-4e52-a633-306d33c7398b", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADFF1381B", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd5b-601a-0004-3b73-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "86f54045-0990-4e52-a633-306d33c7398b", + "Content-MD5" : "M8TGtFtK+E9gEf7aAk0TeA==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "7a273d3f-8de4-4561-aafd-40cbaecef67e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADFF97786", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd5d-601a-0004-3c73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "7a273d3f-8de4-4561-aafd-40cbaecef67e" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?prevsharesnapshot=2020-10-23T19%3A36%3A01.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "2f7e27fd-e9dc-42f8-8b26-69a0ed196df8" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "ETag" : "0x8D8778ADFF97786", + "x-ms-request-id" : "0b80fd5e-601a-0004-3d73-a9c5f4000000", + "Body" : "05115121023", + "x-ms-client-request-id" : "2f7e27fd-e9dc-42f8-8b26-69a0ed196df8", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff3566829989544019f841", "fileapitestslistrangesdiff3860919fba80a59d1941" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json new file mode 100644 index 000000000000..7e3589c88825 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json @@ -0,0 +1,214 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "95a30f0c-ffe4-4e26-8db4-1bec196de3eb" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE01772F0", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:02 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd60-601a-0004-3e73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "95a30f0c-ffe4-4e26-8db4-1bec196de3eb" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "45574bf2-bf18-41eb-b26a-6e5dc8626eaf" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:36:02.2688384Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:02 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "ETag" : "0x8D8778AE025C280", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:36:02.2688384Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd62-601a-0004-3f73-a9c5f4000000", + "x-ms-client-request-id" : "45574bf2-bf18-41eb-b26a-6e5dc8626eaf", + "x-ms-file-last-write-time" : "2020-10-23T19:36:02.2688384Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "95109ad8-1c78-4d55-9755-f29e613ddfae", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE390C698", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd63-601a-0004-4073-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "95109ad8-1c78-4d55-9755-f29e613ddfae", + "Content-MD5" : "fn0MIQfr1C2U60ck5C1Fkg==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0fb44088-dc97-4ee8-897b-1481bf3824b7" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:36:08.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE01772F0", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:02 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd6c-601a-0004-4373-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "0fb44088-dc97-4ee8-897b-1481bf3824b7" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "1114d039-08a9-4928-9397-3b14d67090b6", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE3AA6F6E", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd6d-601a-0004-4473-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "1114d039-08a9-4928-9397-3b14d67090b6", + "Content-MD5" : "vz7foak6A9Pwv0HjmPKA4w==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0a719f51-38a2-4518-ba0b-275cd18b8eea", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE3B17603", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd6e-601a-0004-4573-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "0a719f51-38a2-4518-ba0b-275cd18b8eea", + "Content-MD5" : "psgyztntF/eWt6iDy2Cgbw==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "ed7ac37b-a3f6-4bcd-92c6-29a01cf10961" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE3B98E52", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd6f-601a-0004-4673-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "ed7ac37b-a3f6-4bcd-92c6-29a01cf10961" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "ba648583-dcec-4f50-a346-3767c8d49f73" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE3C094E7", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd70-601a-0004-4773-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "ba648583-dcec-4f50-a346-3767c8d49f73" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?prevsharesnapshot=2020-10-23T19%3A36%3A08.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "3b8f9dd4-6522-4776-8516-e799d6fe1728" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "ETag" : "0x8D8778AE3C094E7", + "x-ms-request-id" : "0b80fd71-601a-0004-4873-a9c5f4000000", + "Body" : "051151210231024153515362047", + "x-ms-client-request-id" : "3b8f9dd4-6522-4776-8516-e799d6fe1728", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff44520981b52588f8394d", "fileapitestslistrangesdiff43708734f80127cef246" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json new file mode 100644 index 000000000000..6983442e406f --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json @@ -0,0 +1,124 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "48d4dccc-5e16-44e4-b2f9-bccba2ee4107" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877895FA5A2FA", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:17 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d814-f01a-0023-2372-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:16 GMT", + "x-ms-client-request-id" : "48d4dccc-5e16-44e4-b2f9-bccba2ee4107" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c/fileasyncapitestslistrangesdiff0855387618dad0f0e", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e4356993-57c0-41f4-bc96-41198da234a1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:17.8266993Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:17 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:17 GMT", + "ETag" : "0x8D877896007B171", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:17.8266993Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d818-f01a-0023-2472-a95fbd000000", + "x-ms-client-request-id" : "e4356993-57c0-41f4-bc96-41198da234a1", + "x-ms-file-last-write-time" : "2020-10-23T19:25:17.8266993Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c/fileasyncapitestslistrangesdiff0855387618dad0f0e?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "6c24d715-bd62-4511-821b-9b3400f87094", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778963D38AE0", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:24 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d81a-f01a-0023-2572-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:23 GMT", + "x-ms-client-request-id" : "6c24d715-bd62-4511-821b-9b3400f87094", + "Content-MD5" : "el6sFbI5QpqgPcmPL3zvLg==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "57221a69-cb30-42b3-9f80-5c791e0c7645" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:24.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877895FA5A2FA", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:17 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d823-f01a-0023-2972-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:23 GMT", + "x-ms-client-request-id" : "57221a69-cb30-42b3-9f80-5c791e0c7645" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c/fileasyncapitestslistrangesdiff0855387618dad0f0e?prevsharesnapshot=2020-10-23T19%3A25%3A24.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0fed3537-9eb5-4303-a5dc-c51453e1bd63" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:24 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:24 GMT", + "ETag" : "0x8D8778963D38AE0", + "Content-Length" : "51", + "x-ms-request-id" : "c6a9d824-f01a-0023-2a72-a95fbd000000", + "Body" : "", + "x-ms-client-request-id" : "0fed3537-9eb5-4303-a5dc-c51453e1bd63", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff027689f25c969f76c", "fileasyncapitestslistrangesdiff0855387618dad0f0e" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json new file mode 100644 index 000000000000..2d41ac60a92a --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json @@ -0,0 +1,148 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "81756ff9-32a2-465a-841b-e0378b8bc5f7" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778964AED1F1", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:25 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d827-f01a-0023-2b72-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:25 GMT", + "x-ms-client-request-id" : "81756ff9-32a2-465a-841b-e0378b8bc5f7" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a3a19d1f-17a1-42be-aa4d-fd2ff56584f2" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:25.7192738Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:25 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:25 GMT", + "ETag" : "0x8D8778964BC0122", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:25.7192738Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d829-f01a-0023-2c72-a95fbd000000", + "x-ms-client-request-id" : "a3a19d1f-17a1-42be-aa4d-fd2ff56584f2", + "x-ms-file-last-write-time" : "2020-10-23T19:25:25.7192738Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e6ea8046-b212-4d65-b80e-d459a99e77fe", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896893EB83", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d82a-f01a-0023-2d72-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:31 GMT", + "x-ms-client-request-id" : "e6ea8046-b212-4d65-b80e-d459a99e77fe", + "Content-MD5" : "qCbPVCEbWSw22ZTay26hzQ==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "16922d1d-0dd1-4d9b-945c-9499778deec1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:32.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778964AED1F1", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:25 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d837-f01a-0023-3072-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:31 GMT", + "x-ms-client-request-id" : "16922d1d-0dd1-4d9b-945c-9499778deec1" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "f56d56c6-73a3-4c8e-93ea-63ef9e708e53", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778968CD5912", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d839-f01a-0023-3172-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:31 GMT", + "x-ms-client-request-id" : "f56d56c6-73a3-4c8e-93ea-63ef9e708e53", + "Content-MD5" : "UIGBXvZJYGrxPzCcPAXlUg==" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643?prevsharesnapshot=2020-10-23T19%3A25%3A32.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "043551a8-10db-48df-9e5e-94cc070cf19e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:31 GMT", + "ETag" : "0x8D8778968CD5912", + "Content-Length" : "103", + "x-ms-request-id" : "c6a9d83a-f01a-0023-3272-a95fbd000000", + "Body" : "0511", + "x-ms-client-request-id" : "043551a8-10db-48df-9e5e-94cc070cf19e", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff109485c713b811a48", "fileasyncapitestslistrangesdiff15159784db21a3643" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json new file mode 100644 index 000000000000..82edb39a3b3b --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json @@ -0,0 +1,145 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d421326c-cf92-40c2-b923-bab1350da7fa" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778968EE8DB4", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d83d-f01a-0023-3472-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:32 GMT", + "x-ms-client-request-id" : "d421326c-cf92-40c2-b923-bab1350da7fa" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0a20da02-0177-44c3-a3c2-d7a5ec6c1fd1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:32.8671333Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:32 GMT", + "ETag" : "0x8D8778968FEAE65", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:32.8671333Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d840-f01a-0023-3572-a95fbd000000", + "x-ms-client-request-id" : "0a20da02-0177-44c3-a3c2-d7a5ec6c1fd1", + "x-ms-file-last-write-time" : "2020-10-23T19:25:32.8671333Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "24d7064e-3fc8-4a6a-8482-24f0ef3f0cfd", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896C8DBE20", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:38 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d841-f01a-0023-3672-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "x-ms-client-request-id" : "24d7064e-3fc8-4a6a-8482-24f0ef3f0cfd", + "Content-MD5" : "V3X8GGqXIMZBdjhQfO007Q==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d0470b67-9df7-419c-962d-c4723cdc1472" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:38.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778968EE8DB4", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d847-f01a-0023-3872-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "x-ms-client-request-id" : "d0470b67-9df7-419c-962d-c4723cdc1472" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "22d9ecf3-fa72-489c-aeb3-76b28ebe375d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896CA25C98", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:38 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d848-f01a-0023-3972-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "x-ms-client-request-id" : "22d9ecf3-fa72-489c-aeb3-76b28ebe375d" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d?prevsharesnapshot=2020-10-23T19%3A25%3A38.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "c6bb85fa-f34d-4c53-ac75-3a82783171cc" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:38 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "ETag" : "0x8D877896CA25C98", + "Content-Length" : "113", + "x-ms-request-id" : "c6a9d849-f01a-0023-3a72-a95fbd000000", + "Body" : "0511", + "x-ms-client-request-id" : "c6bb85fa-f34d-4c53-ac75-3a82783171cc", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff244353c3fd45e11b0", "fileasyncapitestslistrangesdiff236099c4aa0b70d0d" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json new file mode 100644 index 000000000000..9a0bd79879c1 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json @@ -0,0 +1,169 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "df51cc6b-f182-4c29-8b1c-8097a65c8086" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896CC24F09", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:39 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d84c-f01a-0023-3c72-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "x-ms-client-request-id" : "df51cc6b-f182-4c29-8b1c-8097a65c8086" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d52ca394-05de-423b-a776-c67ef01bb5c7" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:39.2642730Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:39 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "ETag" : "0x8D877896CCECEAA", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:39.2642730Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d84e-f01a-0023-3d72-a95fbd000000", + "x-ms-client-request-id" : "d52ca394-05de-423b-a776-c67ef01bb5c7", + "x-ms-file-last-write-time" : "2020-10-23T19:25:39.2642730Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d849648b-237f-40d0-bf42-cd6ac7838aa7", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970ACADF4", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:45 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d84f-f01a-0023-3e72-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "d849648b-237f-40d0-bf42-cd6ac7838aa7", + "Content-MD5" : "mK+H17R2gJMhDlqjSmcZBA==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "272d000b-53b5-43d2-add7-4caef294f26e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:45.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896CC24F09", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:39 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d873-f01a-0023-5772-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "272d000b-53b5-43d2-add7-4caef294f26e" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "1dcf079c-0d59-43bb-bb96-6f135590ac48", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970DAF542", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d874-f01a-0023-5872-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "1dcf079c-0d59-43bb-bb96-6f135590ac48", + "Content-MD5" : "o7mDXQ2eBH1fnqg4a1M9jw==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "fb14c38e-0bd1-4454-9359-5fdaf93bd297" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970E222F3", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d875-f01a-0023-5972-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "fb14c38e-0bd1-4454-9359-5fdaf93bd297" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?prevsharesnapshot=2020-10-23T19%3A25%3A45.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "02e376bb-9c1f-4dee-b513-f4a8514ddb57" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "ETag" : "0x8D8778970E222F3", + "Content-Length" : "161", + "x-ms-request-id" : "c6a9d876-f01a-0023-5a72-a95fbd000000", + "Body" : "05115121023", + "x-ms-client-request-id" : "02e376bb-9c1f-4dee-b513-f4a8514ddb57", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff3991527c5b6a0bc2c", "fileasyncapitestslistrangesdiff391949086f13c2af9" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json new file mode 100644 index 000000000000..2fff2a41d7a5 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json @@ -0,0 +1,214 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "681d9fe0-83fa-4f40-94be-ffac49a45ed8" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970FE6074", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d878-f01a-0023-5b72-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "681d9fe0-83fa-4f40-94be-ffac49a45ed8" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "64dc7fc5-3d01-4f7d-be77-8e175d63549c" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:46.3640874Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "ETag" : "0x8D87789710A272A", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:46.3640874Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d87b-f01a-0023-5c72-a95fbd000000", + "x-ms-client-request-id" : "64dc7fc5-3d01-4f7d-be77-8e175d63549c", + "x-ms-file-last-write-time" : "2020-10-23T19:25:46.3640874Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e38a2b41-c477-47f4-be0e-2986727d0de8", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87789749ABDDB", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:52 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d87c-f01a-0023-5d72-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:51 GMT", + "x-ms-client-request-id" : "e38a2b41-c477-47f4-be0e-2986727d0de8", + "Content-MD5" : "fumkz1IO6/Z3xiWdH4nUTQ==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e534b91e-54d0-4d2c-96e8-2ef59b87733d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:52.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970FE6074", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d889-f01a-0023-6372-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:51 GMT", + "x-ms-client-request-id" : "e534b91e-54d0-4d2c-96e8-2ef59b87733d" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "b5d24903-f55f-44df-8753-54357e94cf2e", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778974B41874", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:52 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d88b-f01a-0023-6472-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:51 GMT", + "x-ms-client-request-id" : "b5d24903-f55f-44df-8753-54357e94cf2e", + "Content-MD5" : "jDgJRT9kgYsJHaSBYWcvcg==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "4695b74b-ec1d-4381-8a23-ca3691ad2ddc", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778974E25FC3", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:52 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "7a93ddd8-201a-00c4-5b72-a94fb0000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:52 GMT", + "x-ms-client-request-id" : "4695b74b-ec1d-4381-8a23-ca3691ad2ddc", + "Content-MD5" : "24qkYSCoEUBF8bVKj/E8Hw==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8c4eb5a1-6729-4877-8f83-8494b170be09" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877897508B5DE", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:53 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d88c-f01a-0023-6572-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:52 GMT", + "x-ms-client-request-id" : "8c4eb5a1-6729-4877-8f83-8494b170be09" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8d062fb2-b996-429b-9ee8-9792129417af" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87789750F9565", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:53 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "7a93dddc-201a-00c4-5c72-a94fb0000000", + "Date" : "Fri, 23 Oct 2020 19:25:53 GMT", + "x-ms-client-request-id" : "8d062fb2-b996-429b-9ee8-9792129417af" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?prevsharesnapshot=2020-10-23T19%3A25%3A52.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "4d683e83-f918-4161-912b-b3b17a2a27c1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:53 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:54 GMT", + "ETag" : "0x8D87789750F9565", + "Content-Length" : "269", + "x-ms-request-id" : "7a93ddde-201a-00c4-5d72-a94fb0000000", + "Body" : "051151210231024153515362047", + "x-ms-client-request-id" : "4d683e83-f918-4161-912b-b3b17a2a27c1", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff49440340b8d5b2976", "fileasyncapitestslistrangesdiff450097881e6a738e5" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/swagger/README.md b/sdk/storage/azure-storage-file-share/swagger/README.md index 4879103fce26..077465e80907 100644 --- a/sdk/storage/azure-storage-file-share/swagger/README.md +++ b/sdk/storage/azure-storage-file-share/swagger/README.md @@ -857,5 +857,20 @@ directive: delete $["x-ms-parameter-grouping"]; ``` +### Add the ShareFileRangeListDeserializer attribute +``` yaml +directive: +- from: ShareFileRangeList.java + where: $ + transform: > + return $. + replace( + "import com.fasterxml.jackson.annotation.JsonProperty;", + "import com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;"). + replace( + "public final class ShareFileRangeList {", + "@JsonDeserialize(using = ShareFileRangeListDeserializer.class)\npublic final class ShareFileRangeList {"); +``` + ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%2Fstorage%2Fazure-storage-file-share%2Fswagger%2FREADME.png) From dbb50fb1d9fc28e36fa2f078fe1d4238871850c1 Mon Sep 17 00:00:00 2001 From: Gauri Prasad <51212198+gapra-msft@users.noreply.github.com> Date: Fri, 23 Oct 2020 17:01:20 -0700 Subject: [PATCH 13/24] Marked all share and share snapshot tests as playback (#16765) --- .../storage/file/share/ShareAPITests.groovy | 16 ++++++++++- .../share/specialized/LeaseAPITest.groovy | 27 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/ShareAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/ShareAPITests.groovy index cb45eabd81d9..c66d1f7b520a 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/ShareAPITests.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/ShareAPITests.groovy @@ -24,7 +24,7 @@ import com.azure.storage.file.share.options.ShareGetStatisticsOptions import com.azure.storage.file.share.options.ShareSetAccessPolicyOptions import com.azure.storage.file.share.options.ShareSetPropertiesOptions import com.azure.storage.file.share.options.ShareSetMetadataOptions - +import spock.lang.Requires import spock.lang.Unroll import java.time.LocalDateTime @@ -236,6 +236,7 @@ class ShareAPITests extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Delete share lease"() { setup: primaryShareClient.create() @@ -245,6 +246,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(primaryShareClient.deleteWithResponse(new ShareDeleteOptions().setRequestConditions(new ShareRequestConditions().setLeaseId(leaseID)), null, null), 202) } + @Requires( { playbackMode() } ) def "Delete share lease error"() { setup: primaryShareClient.create() @@ -279,6 +281,7 @@ class ShareAPITests extends APISpec { getPropertiesResponse.getValue().getQuota() == 1 } + @Requires( { playbackMode() } ) def "Get properties lease"() { setup: primaryShareClient.create() @@ -288,6 +291,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(primaryShareClient.getPropertiesWithResponse(new ShareGetPropertiesOptions().setRequestConditions(new ShareRequestConditions().setLeaseId(leaseID)),null, null), 200) } + @Requires( { playbackMode() } ) def "Get properties lease error"() { setup: primaryShareClient.create() @@ -381,6 +385,7 @@ class ShareAPITests extends APISpec { id1.getAccessPolicy().getPermissions() == identifier2.getAccessPolicy().getPermissions() } + @Requires( { playbackMode() } ) def "Set access policy lease"() { setup: primaryShareClient.create() @@ -390,6 +395,7 @@ class ShareAPITests extends APISpec { primaryShareClient.setAccessPolicyWithResponse(new ShareSetAccessPolicyOptions().setRequestConditions(new ShareRequestConditions().setLeaseId(leaseID)), null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Set access policy lease error"() { setup: primaryShareClient.create() @@ -434,6 +440,7 @@ class ShareAPITests extends APISpec { id.getAccessPolicy().getPermissions() == identifier.getAccessPolicy().getPermissions() } + @Requires( { playbackMode() } ) def "Get access policy lease"() { setup: primaryShareClient.create() @@ -446,6 +453,7 @@ class ShareAPITests extends APISpec { !response.iterator().hasNext() } + @Requires( { playbackMode() } ) def "Get access policy lease error"() { setup: primaryShareClient.create() @@ -501,6 +509,7 @@ class ShareAPITests extends APISpec { getAccessTierAfterResponse.getAccessTierTransitionState() == "pending-from-hot" } + @Requires( { playbackMode() } ) def "Set properties lease"() { given: primaryShareClient.createWithResponse(new ShareCreateOptions().setAccessTier(ShareAccessTier.HOT), null, null) @@ -514,6 +523,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(setAccessTierResponse, 200) } + @Requires( { playbackMode() } ) def "Set properties lease error"() { given: primaryShareClient.createWithResponse(new ShareCreateOptions().setAccessTier(ShareAccessTier.HOT), null, null) @@ -551,6 +561,7 @@ class ShareAPITests extends APISpec { metadataAfterSet == getMetadataAfterResponse.getMetadata() } + @Requires( { playbackMode() } ) def "Set metadata lease"() { given: primaryShareClient.createWithResponse(null, 1, null, null) @@ -563,6 +574,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(resp, 200) } + @Requires( { playbackMode() } ) def "Set metadata lease error"() { given: primaryShareClient.createWithResponse(null, 1, null, null) @@ -607,6 +619,7 @@ class ShareAPITests extends APISpec { (long) 3 * Constants.GB || 3 } + @Requires( { playbackMode() } ) def "Get statistics lease"() { setup: primaryShareClient.create() @@ -619,6 +632,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(resp, 200) } + @Requires( { playbackMode() } ) def "Get statistics lease error"() { setup: primaryShareClient.create() diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/specialized/LeaseAPITest.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/specialized/LeaseAPITest.groovy index 6d973daf52ad..d68c70a53786 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/specialized/LeaseAPITest.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/specialized/LeaseAPITest.groovy @@ -11,6 +11,7 @@ import com.azure.storage.file.share.models.LeaseStateType import com.azure.storage.file.share.models.ShareStorageException import com.azure.storage.file.share.options.ShareAcquireLeaseOptions import com.azure.storage.file.share.options.ShareBreakLeaseOptions +import spock.lang.Requires import spock.lang.Unroll import java.time.Duration @@ -159,6 +160,7 @@ class LeaseAPITest extends APISpec { } @Unroll + @Requires( { playbackMode() } ) def "Acquire share lease"() { setup: def leaseResponse = createLeaseClient(shareClient, proposedID).acquireLeaseWithResponse(new ShareAcquireLeaseOptions().setDuration(leaseTime), null, null) @@ -179,11 +181,13 @@ class LeaseAPITest extends APISpec { UUID.randomUUID().toString() | -1 || LeaseStateType.LEASED | LeaseDurationType.INFINITE } + @Requires( { playbackMode() } ) def "Acquire share lease min"() { expect: createLeaseClient(shareClient).acquireLeaseWithResponse(null, null, null).getStatusCode() == 201 } + @Requires( { playbackMode() } ) def "Acquire share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -197,6 +201,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, resp.getValue()).releaseLeaseWithResponse(null, null) } + @Requires( { playbackMode() } ) def "Acquire share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -210,6 +215,7 @@ class LeaseAPITest extends APISpec { } @Unroll + @Requires( { playbackMode() } ) def "Acquire share lease duration fail"() { setup: def leaseClient = createLeaseClient(shareClient) @@ -227,6 +233,7 @@ class LeaseAPITest extends APISpec { 70 | _ } + @Requires( { playbackMode() } ) def "Acquire share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() @@ -238,6 +245,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Renew share lease"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -251,6 +259,7 @@ class LeaseAPITest extends APISpec { validateBasicHeaders(renewLeaseResponse.getHeaders()) } + @Requires( { playbackMode() } ) def "Renew share lease min"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -259,6 +268,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, leaseID).renewLeaseWithResponse(null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Renew share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -273,6 +283,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, resp.getValue()).releaseLeaseWithResponse(null, null) } + @Requires( { playbackMode() } ) def "Renew share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -285,6 +296,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Renew share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() @@ -296,6 +308,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Release share lease"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -307,6 +320,7 @@ class LeaseAPITest extends APISpec { validateBasicHeaders(releaseLeaseResponse.getHeaders()) } + @Requires( { playbackMode() } ) def "Release share lease min"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -315,6 +329,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, leaseID).releaseLeaseWithResponse(null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Release share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -325,6 +340,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, leaseID).releaseLeaseWithResponse(null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Release share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -337,6 +353,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Release share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() @@ -349,6 +366,7 @@ class LeaseAPITest extends APISpec { } @Unroll + @Requires( { playbackMode() } ) def "Break share lease"() { setup: def leaseClient = createLeaseClient(shareClient, getRandomUUID()) @@ -374,6 +392,7 @@ class LeaseAPITest extends APISpec { } + @Requires( { playbackMode() } ) def "Break share lease min"() { setup: setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -382,6 +401,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient).breakLeaseWithResponse(new ShareBreakLeaseOptions(), null, null).getStatusCode() == 202 } + @Requires( { playbackMode() } ) def "Break share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -396,6 +416,7 @@ class LeaseAPITest extends APISpec { } + @Requires( { playbackMode() } ) def "Break share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -408,6 +429,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Break share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() @@ -419,6 +441,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Change share lease"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -431,6 +454,7 @@ class LeaseAPITest extends APISpec { validateBasicHeaders(changeLeaseResponse.getHeaders()) } + @Requires( { playbackMode() } ) def "Change share lease min"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -439,6 +463,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, leaseID).changeLeaseWithResponse(getRandomUUID(), null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Change share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -453,6 +478,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, resp.getValue()).releaseLeaseWithResponse(null, null) } + @Requires( { playbackMode() } ) def "Change share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -465,6 +491,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Change share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() From 7db85c537079b08c140f0ee61130433dbd1abd65 Mon Sep 17 00:00:00 2001 From: bikamani <41314966+bikamani@users.noreply.github.com> Date: Fri, 23 Oct 2020 17:08:25 -0700 Subject: [PATCH 14/24] Rename "model" fields with "dtdlModel" or "dtmiModel" to be more descriptive (#16776) --- .../core/DigitalTwinsAsyncClient.java | 16 ++++++++-------- .../digitaltwins/core/DigitalTwinsClient.java | 12 ++++++------ .../core/models/DigitalTwinsModelData.java | 14 +++++++------- .../azure/digitaltwins/core/ModelsTestBase.java | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsAsyncClient.java b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsAsyncClient.java index 1f7374d2502d..84949cab3a39 100644 --- a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsAsyncClient.java +++ b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsAsyncClient.java @@ -741,13 +741,13 @@ Mono> listIncomingRelationshipsNextSinglePag * * {@codesnippet com.azure.digitaltwins.core.asyncClient.createModels#Iterable} * - * @param models The list of models to create. Each string corresponds to exactly one model. + * @param dtdlModels The list of models to create. Each string corresponds to exactly one model. * @return A List of created models. Each {@link DigitalTwinsModelData} instance in this list * will contain metadata about the created model, but will not contain the model itself. */ @ServiceMethod(returns = ReturnType.COLLECTION) - public Mono> createModels(Iterable models) { - return createModelsWithResponse(models, null) + public Mono> createModels(Iterable dtdlModels) { + return createModelsWithResponse(dtdlModels, null) .map(Response::getValue); } @@ -758,19 +758,19 @@ public Mono> createModels(Iterable model * * {@codesnippet com.azure.digitaltwins.core.asyncClient.createModelsWithResponse#Iterable-Options} * - * @param models The list of models to create. Each string corresponds to exactly one model. + * @param dtdlModels The list of models to create. Each string corresponds to exactly one model. * @param options The optional parameters for this request. If null, the default option values will be used. * @return A {@link Response} containing the list of created models. Each {@link DigitalTwinsModelData} instance in this list * will contain metadata about the created model, but will not contain the model itself. */ @ServiceMethod(returns = ReturnType.COLLECTION) - public Mono>> createModelsWithResponse(Iterable models, CreateModelsOptions options) { - return withContext(context -> createModelsWithResponse(models, options, context)); + public Mono>> createModelsWithResponse(Iterable dtdlModels, CreateModelsOptions options) { + return withContext(context -> createModelsWithResponse(dtdlModels, options, context)); } - Mono>> createModelsWithResponse(Iterable models, CreateModelsOptions options, Context context) { + Mono>> createModelsWithResponse(Iterable dtdlModels, CreateModelsOptions options, Context context) { List modelsPayload = new ArrayList<>(); - for (String model : models) { + for (String model : dtdlModels) { try { modelsPayload.add(mapper.readValue(model, Object.class)); } diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsClient.java b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsClient.java index a6f68d1bf297..957297dd3019 100644 --- a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsClient.java +++ b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsClient.java @@ -506,13 +506,13 @@ public PagedIterable listIncomingRelationships(String digi * * {@codesnippet com.azure.digitaltwins.core.syncClient.createModels#Iterable} * - * @param models The list of models to create. Each string corresponds to exactly one model. + * @param dtdlModels The list of models to create. Each string corresponds to exactly one model. * @return A List of created models. Each {@link DigitalTwinsModelData} instance in this list * will contain metadata about the created model, but will not contain the model itself. */ @ServiceMethod(returns = ReturnType.COLLECTION) - public Iterable createModels(Iterable models) { - return createModelsWithResponse(models, null, Context.NONE).getValue(); + public Iterable createModels(Iterable dtdlModels) { + return createModelsWithResponse(dtdlModels, null, Context.NONE).getValue(); } /** @@ -522,15 +522,15 @@ public Iterable createModels(Iterable models) { * * {@codesnippet com.azure.digitaltwins.core.syncClient.createModelsWithResponse#Iterable} * - * @param models The list of models to create. Each string corresponds to exactly one model. + * @param dtdlModels The list of models to create. Each string corresponds to exactly one model. * @param options The optional parameters for this request. If null, the default option values will be used. * @param context Additional context that is passed through the Http pipeline during the service call. * @return A {@link Response} containing the list of created models. Each {@link DigitalTwinsModelData} instance in this list * will contain metadata about the created model, but will not contain the model itself. */ @ServiceMethod(returns = ReturnType.COLLECTION) - public Response> createModelsWithResponse(Iterable models, CreateModelsOptions options, Context context) { - return digitalTwinsAsyncClient.createModelsWithResponse(models, options, context).block(); + public Response> createModelsWithResponse(Iterable dtdlModels, CreateModelsOptions options, Context context) { + return digitalTwinsAsyncClient.createModelsWithResponse(dtdlModels, options, context).block(); } /** diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/models/DigitalTwinsModelData.java b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/models/DigitalTwinsModelData.java index 76d692fca598..beaadfcc4c9f 100644 --- a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/models/DigitalTwinsModelData.java +++ b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/models/DigitalTwinsModelData.java @@ -49,24 +49,24 @@ public final class DigitalTwinsModelData { private boolean decommissioned; /* - * The model definition. + * The model definition that conforms to Digital Twins Definition Language (DTDL) v2. */ @JsonProperty(value = "model") - private String model; + private String dtdlModel; /** * Construct a new DigitalTwinsModelData instance. This class should only be constructed internally since the * service never takes this as an input. * * @param modelId The Id of the model. - * @param model The contents of the model. + * @param dtdlModel The contents of the model. * @param displayName The language map of the localized display names. * @param description The language map of the localized descriptions. * @param uploadTime The time when this model was uploaded. * @param decommissioned If this model has been decommissioned. */ public DigitalTwinsModelData(String modelId, - String model, + String dtdlModel, Map displayName, Map description, OffsetDateTime uploadTime, @@ -76,7 +76,7 @@ public DigitalTwinsModelData(String modelId, this.id = modelId; this.uploadTime = uploadTime; this.decommissioned = decommissioned; - this.model = model; + this.dtdlModel = dtdlModel; } /** @@ -132,7 +132,7 @@ public boolean isDecommissioned() { * * @return the model value. */ - public String getModel() { - return this.model; + public String getDtdlModel() { + return this.dtdlModel; } } diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/ModelsTestBase.java b/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/ModelsTestBase.java index c32cfb502119..3de19c55b9aa 100644 --- a/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/ModelsTestBase.java +++ b/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/ModelsTestBase.java @@ -60,7 +60,7 @@ static void assertModelDataAreEqual(DigitalTwinsModelData expected, DigitalTwins // ModelData objects that are obtained through the createModels API do not populate the model field, so it isn't // worth comparing those ModelData objects with ModelData objects retrieved through getModel calls if (compareModel) { - assertEquals(expected.getModel(), actual.getModel()); + assertEquals(expected.getDtdlModel(), actual.getDtdlModel()); } assertEquals(expected.getDescriptionLanguageMap().size(), actual.getDescriptionLanguageMap().size()); From f63dcf355d4ef1d6f18aaeb613abe20031680fd0 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Fri, 23 Oct 2020 17:41:05 -0700 Subject: [PATCH 15/24] Update Delete-RemoteBranches.ps1 (#16779) Co-authored-by: Chidozie Ononiwu --- eng/common/scripts/Delete-RemoteBranches.ps1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/eng/common/scripts/Delete-RemoteBranches.ps1 b/eng/common/scripts/Delete-RemoteBranches.ps1 index 0ca7c55be932..77cf7e506461 100644 --- a/eng/common/scripts/Delete-RemoteBranches.ps1 +++ b/eng/common/scripts/Delete-RemoteBranches.ps1 @@ -9,7 +9,7 @@ param( LogDebug "Operating on Repo [ $RepoName ]" try{ - $branches = (Get-GitHubSourceReferences -RepoOwner $RepoOwner -RepoName $RepoName -Ref "heads/$BranchPrefix").ref + $branches = (Get-GitHubSourceReferences -RepoOwner $RepoOwner -RepoName $RepoName -Ref "heads/$BranchPrefix" -AuthToken $AuthToken).ref } catch { LogError "Get-GitHubSourceReferences failed with exception:`n$_" @@ -22,7 +22,7 @@ foreach ($branch in $branches) $branchName = $branch.Replace("refs/heads/","") $head = "${RepoOwner}/${RepoName}:${branchName}" LogDebug "Operating on branch [ $branchName ]" - $pullRequests = Get-GitHubPullRequests -RepoOwner $RepoOwner -RepoName $RepoName -head $head + $pullRequests = Get-GitHubPullRequests -RepoOwner $RepoOwner -RepoName $RepoName -State "all" -Head $head -AuthToken $AuthToken } catch { @@ -30,9 +30,9 @@ foreach ($branch in $branches) exit 1 } - if ($pullRequests.Count -eq 0) + if ($pullRequests -and (($pullRequests | ? { $_.State -eq "open" }).Count -eq 0)) { - LogDebug "Branch [ $branchName ] in repo [ $RepoName ] has no associated Pull Request. Deleting Branch" + LogDebug "Branch [ $branchName ] in repo [ $RepoName ] has no associated open Pull Request. Deleting Branch" try{ Remove-GitHubSourceReferences -RepoOwner $RepoOwner -RepoName $RepoName -Ref ($branch.Remove(0,5)) -AuthToken $AuthToken } From c4d844ee62debfc55dfedcaed09278a389cca4c0 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Fri, 23 Oct 2020 17:49:07 -0700 Subject: [PATCH 16/24] Sync eng/common directory with azure-sdk-tools for PR 1135 (#16778) * Add check of http link. * Fixed the tool http link Co-authored-by: Sima Zhu --- eng/common/TestResources/New-TestResources.ps1.md | 2 +- eng/common/TestResources/Remove-TestResources.ps1.md | 2 +- eng/common/scripts/Verify-Links.ps1 | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/eng/common/TestResources/New-TestResources.ps1.md b/eng/common/TestResources/New-TestResources.ps1.md index 6fc15eefdb49..c41693c87666 100644 --- a/eng/common/TestResources/New-TestResources.ps1.md +++ b/eng/common/TestResources/New-TestResources.ps1.md @@ -449,7 +449,7 @@ 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). +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](https://go.microsoft.com/fwlink/?LinkID=113216). ## INPUTS diff --git a/eng/common/TestResources/Remove-TestResources.ps1.md b/eng/common/TestResources/Remove-TestResources.ps1.md index 18317cec07cc..8c99997e0731 100644 --- a/eng/common/TestResources/Remove-TestResources.ps1.md +++ b/eng/common/TestResources/Remove-TestResources.ps1.md @@ -263,7 +263,7 @@ 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). +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](https://go.microsoft.com/fwlink/?LinkID=113216). ## INPUTS diff --git a/eng/common/scripts/Verify-Links.ps1 b/eng/common/scripts/Verify-Links.ps1 index 9376564e3472..c9991a058894 100644 --- a/eng/common/scripts/Verify-Links.ps1 +++ b/eng/common/scripts/Verify-Links.ps1 @@ -200,6 +200,10 @@ function CheckLink ([System.Uri]$linkUri) } if ($checkLinkGuidance) { + if ($linkUri.Scheme -eq 'http') { + LogWarning "DO NOT use 'http' in $linkUri. Please use secure link with https instead. Check here for more information: https://aka.ms/azsdk/guideline/links" + $linkValid = $false + } $link = $linkUri.ToString() # Check if the url is relative links, suppress the archor link validation. if (!$linkUri.IsAbsoluteUri -and !$link.StartsWith("#")) { From 9a04b0def919f1710c84d840c124da2db8d5cc3d Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Fri, 23 Oct 2020 19:27:19 -0700 Subject: [PATCH 17/24] Update eng/common workflow docs (#16782) Co-authored-by: Chidozie Ononiwu --- eng/common/README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/eng/common/README.md b/eng/common/README.md index e63b74367b74..7bda6ec94208 100644 --- a/eng/common/README.md +++ b/eng/common/README.md @@ -20,7 +20,6 @@ The 'Sync eng/common directory' PRs will be created in the language repositories 3. The `azure-sdk-tools - sync - eng-common` pipeline queues test runs for template pipelines in various languages. These help you test your changes in the **Tools PR**. 4. If there are changes in the **Tools PR** that will affect the release stage you should approve the release test pipelines by clicking the approval gate. The test (template) pipeline will automatically release the next eligible version without needing manual intervention for the versioning. Please approve your test releases as quickly as possible. A race condition may occur due to someone else queueing the pipeline and going all the way to release using your version while yours is still waiting. If this occurs manually rerun the pipeline that failed. 5. If you make additional changes to your **Tools PR** repeat steps 1 - 4 until you have completed the necessary testing of your changes. This includes full releases of the template package, if necessary. -6. Sign off on CreateSyncPRs stage of the sync pipeline using the approval gate. This stage will create the **Sync PRs** in the various language repos with the `auto-merge` label applied. A link to each of the **Sync PRs** will show up in the **Tools PR** for you to click and review. -7. Go review and approve each of your **Sync PRs**. The merging will happen automatically. -8. Sign off on VerifyAndMerge stage of the sync pipeline using the approval gate. This stage will merge any remaining open **Sync PRs** and also append `auto-merge` to the **Tools PR** so it will automatically merge once the pipeline finishes. -7. Sign Off on the VerifyAndMerge stage. This will merge any remaining open **Sync PR** and also append `auto-merge` to the **Tools PR**. +6. Sign off on CreateSyncPRs stage of the sync pipeline using the approval gate. This stage will create the **Sync PRs** in the various language repos. A link to each of the **Sync PRs** will show up in the **Tools PR** for you to click and review. +7. Go review and approve each of your **Sync PRs**. +8. Sign Off on the VerifyAndMerge stage. This will merge any remaining open **Sync PR** and also append `auto-merge` to the **Tools PR**. From 12b5df0dad9549222649a84fbab9811e6477c533 Mon Sep 17 00:00:00 2001 From: Vinay Gera Date: Fri, 23 Oct 2020 21:54:35 -0700 Subject: [PATCH 18/24] Fix Spotbugs in azure-core (#16500) --- .../resources/spotbugs/spotbugs-exclude.xml | 19 ++++++ sdk/core/azure-core/pom.xml | 17 ++++++ .../azure/core/util/logging/ClientLogger.java | 21 +++++-- .../core/util/logging/ClientLoggerTests.java | 59 +++++++++++++++++++ 4 files changed, 112 insertions(+), 4 deletions(-) diff --git a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml index 6d1003c75812..05a4da3620ee 100755 --- a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml +++ b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml @@ -2458,4 +2458,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/sdk/core/azure-core/pom.xml b/sdk/core/azure-core/pom.xml index 62533be9e2e8..82714f23f444 100644 --- a/sdk/core/azure-core/pom.xml +++ b/sdk/core/azure-core/pom.xml @@ -183,6 +183,23 @@ + + + + com.github.spotbugs + spotbugs-maven-plugin + 3.1.12.2 + + + + com.h3xstream.findsecbugs + findsecbugs-plugin + 1.9.0 + + + + + diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/logging/ClientLogger.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/logging/ClientLogger.java index 090072a409e1..eb390c706729 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/logging/ClientLogger.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/logging/ClientLogger.java @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.Objects; +import java.util.regex.Pattern; /** * This is a fluent logger helper class that wraps a pluggable {@link Logger}. @@ -35,6 +36,7 @@ * @see Configuration */ public class ClientLogger { + private static final Pattern CRLF_PATTERN = Pattern.compile("[\r\n]"); private final Logger logger; /** @@ -70,7 +72,7 @@ public ClientLogger(String className) { */ public void verbose(String message) { if (logger.isDebugEnabled()) { - logger.debug(message); + logger.debug(sanitizeLogMessageInput(message)); } } @@ -106,7 +108,7 @@ public void verbose(String format, Object... args) { */ public void info(String message) { if (logger.isInfoEnabled()) { - logger.info(message); + logger.info(sanitizeLogMessageInput(message)); } } @@ -142,7 +144,7 @@ public void info(String format, Object... args) { */ public void warning(String message) { if (logger.isWarnEnabled()) { - logger.warn(message); + logger.warn(sanitizeLogMessageInput(message)); } } @@ -178,7 +180,7 @@ public void warning(String format, Object... args) { */ public void error(String message) { if (logger.isErrorEnabled()) { - logger.error(message); + logger.error(sanitizeLogMessageInput(message)); } } @@ -327,6 +329,7 @@ private void performLogging(LogLevel logLevel, boolean isExceptionLogging, Strin } } + sanitizeLogMessageInput(format); switch (logLevel) { case VERBOSE: logger.debug(format, args); @@ -401,4 +404,14 @@ private boolean doesArgsHaveThrowable(Object... args) { private Object[] removeThrowable(Object... args) { return Arrays.copyOf(args, args.length - 1); } + + /** + * Removes CRLF pattern in the {@code logMessage}. + * + * @param logMessage The log message to sanitize. + * @return The updated logMessage. + */ + private static String sanitizeLogMessageInput(String logMessage) { + return CRLF_PATTERN.matcher(logMessage).replaceAll(""); + } } diff --git a/sdk/core/azure-core/src/test/java/com/azure/core/util/logging/ClientLoggerTests.java b/sdk/core/azure-core/src/test/java/com/azure/core/util/logging/ClientLoggerTests.java index 91b4c78d6845..11d6a8a804da 100644 --- a/sdk/core/azure-core/src/test/java/com/azure/core/util/logging/ClientLoggerTests.java +++ b/sdk/core/azure-core/src/test/java/com/azure/core/util/logging/ClientLoggerTests.java @@ -80,6 +80,30 @@ public void logSimpleMessage(LogLevel logLevelToConfigure, LogLevel logLevelToUs assertEquals(logContainsMessage, logValues.contains(logMessage)); } + /** + * Test whether a log will be captured when the ClientLogger and message are configured to the passed log levels. + */ + @ParameterizedTest + @MethodSource("logMaliciousErrorSupplier") + @ResourceLock("SYSTEM_OUT") + public void logMaliciousMessage(LogLevel logLevelToConfigure, LogLevel logLevelToUse) + throws UnsupportedEncodingException { + String logMessage = "You have successfully authenticated, \r\n[INFO] User dummy was not" + + " successfully authenticated."; + + String expectedMessage = "You have successfully authenticated, [INFO] User dummy was not" + + " successfully authenticated."; + + String originalLogLevel = setupLogLevel(logLevelToConfigure.getLogLevel()); + logMessage(new ClientLogger(ClientLoggerTests.class), logLevelToUse, logMessage); + + setPropertyToOriginalOrClear(originalLogLevel); + + String logValues = logCaptureStream.toString("UTF-8"); + System.out.println(logValues); + assertEquals(true, logValues.contains(expectedMessage)); + } + @ParameterizedTest @MethodSource("singleLevelCheckSupplier") @ResourceLock("SYSTEM_OUT") @@ -461,6 +485,41 @@ private static Stream multiLevelCheckSupplier() { ); } + private static Stream logMaliciousErrorSupplier() { + return Stream.of( + // Supported logging level set to VERBOSE. + // Checking VERBOSE. + Arguments.of(LogLevel.VERBOSE, LogLevel.VERBOSE, true), + + // Checking INFORMATIONAL. + Arguments.of(LogLevel.VERBOSE, LogLevel.INFORMATIONAL, true), + + // Checking WARNING. + Arguments.of(LogLevel.VERBOSE, LogLevel.WARNING, true), + + // Checking ERROR. + Arguments.of(LogLevel.VERBOSE, LogLevel.ERROR, true), + + // Checking INFORMATIONAL. + Arguments.of(LogLevel.INFORMATIONAL, LogLevel.INFORMATIONAL, true), + + // Checking WARNING. + Arguments.of(LogLevel.INFORMATIONAL, LogLevel.WARNING, true), + + // Checking ERROR. + Arguments.of(LogLevel.INFORMATIONAL, LogLevel.ERROR, true), + + // Checking WARNING. + Arguments.of(LogLevel.WARNING, LogLevel.WARNING, true), + + // Checking ERROR. + Arguments.of(LogLevel.WARNING, LogLevel.ERROR, true), + + // Checking ERROR. + Arguments.of(LogLevel.ERROR, LogLevel.ERROR, true) + ); + } + private static Stream logExceptionAsWarningSupplier() { return Stream.of( Arguments.of(LogLevel.VERBOSE, true, true), From 0de01a1840de13c4a6292d310180808f758ae435 Mon Sep 17 00:00:00 2001 From: Bhaskar Mallapragada Date: Sat, 24 Oct 2020 13:59:20 -0700 Subject: [PATCH 19/24] Fix to prevent a race condition in continuation token. This was part of the earlier V4 branch, but got overwritten during merge. (#16775) --- .../azure/cosmos/implementation/query/DocumentProducer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/query/DocumentProducer.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/query/DocumentProducer.java index d7bd9a56153b..7f3622d00374 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/query/DocumentProducer.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/query/DocumentProducer.java @@ -147,7 +147,9 @@ public DocumentProducer( this.correlatedActivityId = correlatedActivityId; - this.cosmosQueryRequestOptions = cosmosQueryRequestOptions != null ? cosmosQueryRequestOptions : new CosmosQueryRequestOptions(); + this.cosmosQueryRequestOptions = cosmosQueryRequestOptions != null ? + ModelBridgeInternal.createQueryRequestOptions(cosmosQueryRequestOptions) + : new CosmosQueryRequestOptions(); ModelBridgeInternal.setQueryRequestOptionsContinuationToken(this.cosmosQueryRequestOptions, initialContinuationToken); this.lastResponseContinuationToken = initialContinuationToken; this.resourceType = resourceType; From 05e211e205ac91df622f444760abbb07aa188f53 Mon Sep 17 00:00:00 2001 From: Rujun Chen Date: Mon, 26 Oct 2020 10:16:01 +0800 Subject: [PATCH 20/24] Fix typo. Change MemberShip to Membership. (#16734) Co-authored-by: Rujun Chen --- .../sample/aad/controller/TodoListController.java | 8 ++++---- .../aad/AADAuthenticationProperties.java | 2 +- .../autoconfigure/aad/AzureADGraphClient.java | 14 +++++++------- .../aad/{MemberShip.java => Membership.java} | 8 ++++---- .../aad/{MemberShips.java => Memberships.java} | 14 +++++++------- .../{MemberShipTest.java => MembershipTest.java} | 10 +++++----- 6 files changed, 28 insertions(+), 28 deletions(-) rename sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/{MemberShip.java => Membership.java} (91%) rename sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/{MemberShips.java => Memberships.java} (81%) rename sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/{MemberShipTest.java => MembershipTest.java} (63%) diff --git a/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-active-directory/src/main/java/com/azure/spring/sample/aad/controller/TodoListController.java b/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-active-directory/src/main/java/com/azure/spring/sample/aad/controller/TodoListController.java index f17af46fda28..4a2f001b5186 100644 --- a/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-active-directory/src/main/java/com/azure/spring/sample/aad/controller/TodoListController.java +++ b/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-active-directory/src/main/java/com/azure/spring/sample/aad/controller/TodoListController.java @@ -5,7 +5,7 @@ import com.azure.spring.sample.aad.model.TodoItem; import com.azure.spring.autoconfigure.aad.AADAuthenticationProperties; -import com.azure.spring.autoconfigure.aad.MemberShip; +import com.azure.spring.autoconfigure.aad.Membership; import com.azure.spring.autoconfigure.aad.UserPrincipal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -96,11 +96,11 @@ public ResponseEntity updateTodoItem(@RequestBody TodoItem item) { public ResponseEntity deleteTodoItem(@PathVariable("id") int id, PreAuthenticatedAuthenticationToken authToken) { final UserPrincipal current = (UserPrincipal) authToken.getPrincipal(); - MemberShip memberShip = new MemberShip( + Membership membership = new Membership( "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", - MemberShip.OBJECT_TYPE_GROUP, + Membership.OBJECT_TYPE_GROUP, "group1"); - if (current.isMemberOf(aadAuthenticationProperties, memberShip.getDisplayName())) { + if (current.isMemberOf(aadAuthenticationProperties, membership.getDisplayName())) { return todoList.stream() .filter(i -> i.getID() == id) .findFirst() diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java index 02cce164facd..9f02a1d0e583 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java +++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java @@ -136,7 +136,7 @@ public static class UserGroupProperties { * Node is a UserGroup. */ @NotEmpty - private String value = MemberShip.OBJECT_TYPE_GROUP; + private String value = Membership.OBJECT_TYPE_GROUP; /** * Key of the JSON Node containing the Azure Object ID for the {@code UserGroup}. diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java index c85e50a73f85..9fe91e8ea36d 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java +++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java @@ -122,22 +122,22 @@ public Set getGroups(String graphApiToken) throws IOException { String aadMembershipRestUri = serviceEndpoints.getAadMembershipRestUri(); while (aadMembershipRestUri != null) { String membershipsJson = getUserMemberships(graphApiToken, aadMembershipRestUri); - MemberShips memberShips = objectMapper.readValue(membershipsJson, MemberShips.class); - memberShips.getValue() + Memberships memberships = objectMapper.readValue(membershipsJson, Memberships.class); + memberships.getValue() .stream() .filter(this::isGroupObject) - .map(MemberShip::getDisplayName) + .map(Membership::getDisplayName) .forEach(groups::add); - aadMembershipRestUri = Optional.of(memberShips) - .map(MemberShips::getOdataNextLink) + aadMembershipRestUri = Optional.of(memberships) + .map(Memberships::getOdataNextLink) .map(this::getUrlStringFromODataNextLink) .orElse(null); } return groups; } - private boolean isGroupObject(final MemberShip memberShip) { - return memberShip.getObjectType().equals(aadAuthenticationProperties.getUserGroup().getValue()); + private boolean isGroupObject(final Membership membership) { + return membership.getObjectType().equals(aadAuthenticationProperties.getUserGroup().getValue()); } /** diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShip.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java similarity index 91% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShip.java rename to sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java index 043f9650f66f..9911094a1ab8 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShip.java +++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java @@ -16,7 +16,7 @@ * Refs: https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/api/api-catalog */ @JsonIgnoreProperties(ignoreUnknown = true) -public class MemberShip implements Serializable { +public class Membership implements Serializable { private static final long serialVersionUID = 9064197572478554735L; public static final String OBJECT_TYPE_GROUP = "Group"; @@ -25,7 +25,7 @@ public class MemberShip implements Serializable { private final String displayName; @JsonCreator - public MemberShip( + public Membership( @JsonProperty("objectId") @JsonAlias("id") String objectID, @JsonProperty("objectType") @JsonAlias("@odata.type") String objectType, @JsonProperty("displayName") String displayName) { @@ -51,10 +51,10 @@ public boolean equals(Object o) { if (o == this) { return true; } - if (!(o instanceof MemberShip)) { + if (!(o instanceof Membership)) { return false; } - final MemberShip group = (MemberShip) o; + final Membership group = (Membership) o; return this.getDisplayName().equals(group.getDisplayName()) && this.getObjectID().equals(group.getObjectID()) && this.getObjectType().equals(group.getObjectType()); diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShips.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java similarity index 81% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShips.java rename to sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java index 6f6e3ba66925..08be48301dce 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShips.java +++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java @@ -15,15 +15,15 @@ * Refs: https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/api/api-catalog */ @JsonIgnoreProperties(ignoreUnknown = true) -public class MemberShips { +public class Memberships { private final String odataNextLink; - private final List value; + private final List value; @JsonCreator - public MemberShips( + public Memberships( @JsonProperty("odata.nextLink") String odataNextLink, - @JsonProperty("value") List value) { + @JsonProperty("value") List value) { this.odataNextLink = odataNextLink; this.value = value; } @@ -32,7 +32,7 @@ public String getOdataNextLink() { return odataNextLink; } - public List getValue() { + public List getValue() { return value; } @@ -41,10 +41,10 @@ public boolean equals(Object o) { if (o == this) { return true; } - if (!(o instanceof MemberShips)) { + if (!(o instanceof Memberships)) { return false; } - final MemberShips groups = (MemberShips) o; + final Memberships groups = (Memberships) o; return this.getOdataNextLink().equals(groups.getOdataNextLink()) && this.getValue().equals(groups.getValue()); } diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MemberShipTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java similarity index 63% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MemberShipTest.java rename to sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java index 0dafd27e0abd..8c27525c463e 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MemberShipTest.java +++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java @@ -6,8 +6,8 @@ import org.junit.Assert; import org.junit.Test; -public class MemberShipTest { - private static final MemberShip GROUP_1 = new MemberShip("12345", MemberShip.OBJECT_TYPE_GROUP, "test"); +public class MembershipTest { + private static final Membership GROUP_1 = new Membership("12345", Membership.OBJECT_TYPE_GROUP, "test"); @Test public void getDisplayName() { @@ -16,7 +16,7 @@ public void getDisplayName() { @Test public void getObjectType() { - Assert.assertEquals(MemberShip.OBJECT_TYPE_GROUP, GROUP_1.getObjectType()); + Assert.assertEquals(Membership.OBJECT_TYPE_GROUP, GROUP_1.getObjectType()); } @Test @@ -26,13 +26,13 @@ public void getObjectID() { @Test public void equals() { - final MemberShip group2 = new MemberShip("12345", MemberShip.OBJECT_TYPE_GROUP, "test"); + final Membership group2 = new Membership("12345", Membership.OBJECT_TYPE_GROUP, "test"); Assert.assertEquals(GROUP_1, group2); } @Test public void hashCodeTest() { - final MemberShip group2 = new MemberShip("12345", MemberShip.OBJECT_TYPE_GROUP, "test"); + final Membership group2 = new Membership("12345", Membership.OBJECT_TYPE_GROUP, "test"); Assert.assertEquals(GROUP_1.hashCode(), group2.hashCode()); } } From 853a45f85c851187198d3c1266c8973ab1fef0db Mon Sep 17 00:00:00 2001 From: Manfred Riem Date: Sun, 25 Oct 2020 23:00:25 -0600 Subject: [PATCH 21/24] End to End TLS SSL step #2 (#16708) * Documentation changes * Removing unused KeyVaultCertificate class * Add sample java code Co-authored-by: Rujun Chen --- .../azure-security-keyvault-jca/README.md | 174 +++++---- .../azure-security-keyvault-jca/pom.xml | 4 +- .../keyvault/jca/KeyVaultCertificate.java | 250 ------------ .../security/keyvault/jca/KeyVaultClient.java | 14 +- .../keyvault/jca/KeyVaultJcaProvider.java | 4 +- .../keyvault/jca/KeyVaultKeyManager.java | 10 +- .../jca/KeyVaultKeyManagerFactory.java | 2 +- .../keyvault/jca/KeyVaultKeyStore.java | 2 +- .../jca/KeyVaultLoadStoreParameter.java | 4 +- .../keyvault/jca/KeyVaultTrustManager.java | 2 +- .../jca/KeyVaultTrustManagerFactory.java | 2 +- .../KeyVaultTrustManagerFactoryProvider.java | 4 +- .../security/keyvault/jca/package-info.java | 2 +- .../samples/java/sample/ClientSSLSample.java | 76 ++++ .../samples/java/sample/ServerSSLSample.java | 41 ++ .../security/keyvault/jca/AuthClientTest.java | 2 - .../keyvault/jca/DelegateRestClientTest.java | 2 - .../jca/JacksonJsonConverterTest.java | 2 - .../keyvault/jca/KeyVaultCertificateTest.java | 369 ------------------ .../keyvault/jca/KeyVaultJcaProviderTest.java | 2 - .../keyvault/jca/KeyVaultKeyStoreTest.java | 2 - .../jca/KeyVaultLoadStoreParameterTest.java | 2 - .../keyvault/jca/LegacyRestClientTest.java | 2 - .../keyvault/jca/RestClientFactoryTest.java | 2 - .../keyvault/jca/ServerSocketTest.java | 9 +- .../src/main/resources/application.properties | 14 +- .../README.md | 58 +-- 27 files changed, 270 insertions(+), 787 deletions(-) delete mode 100644 sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultCertificate.java create mode 100644 sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ClientSSLSample.java create mode 100644 sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ServerSSLSample.java delete mode 100644 sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultCertificateTest.java diff --git a/sdk/keyvault/azure-security-keyvault-jca/README.md b/sdk/keyvault/azure-security-keyvault-jca/README.md index f6efb38fbe05..d53ac82c551d 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/README.md +++ b/sdk/keyvault/azure-security-keyvault-jca/README.md @@ -1,51 +1,49 @@ -# JCA Provider for Azure Key Vault +# Azure Key Vault JCA client library for Java + +# Getting started + +# Key concepts The JCA Provider for Azure Key Vault is a JCA provider for certificates in Azure Key Vault. It is built on four principles: -1. Must be extremely thin to run within a JVM -1. Must not introduce any library version conflicts with Java app code dependencies -1. Must not introduce any class loader hierarchy conflicts with Java app code dependencies +1. Must be extremely thin to run within a JVM. +1. Must not introduce any library version conflicts with Java app code dependencies. +1. Must not introduce any class loader hierarchy conflicts with Java app code dependencies. 1. Must be ready for "never trust, always verify and credential-free" Zero Trust environments. -## Testing the version under development - -If you want to test the current version under development you will have to -build and install it into your local Maven repository. To do so use the -following command line: - -``` - mvn clean install -DskipTests=true -``` +# Examples ## Server side SSL -If you are looking to integrate the JCA provider to create a SSLServerSocket +If you are looking to integrate the JCA provider to create an SSLServerSocket see the example below. + + ```java - KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); - Security.addProvider(provider); +KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); +Security.addProvider(provider); - KeyStore ks = KeyStore.getInstance("AzureKeyVault"); - KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( - System.getProperty("azure.keyvault.uri"), - System.getProperty("azure.tenant.id"), - System.getProperty("azure.client.id"), - System.getProperty("azure.client.secret")); - ks.load(parameter); +KeyStore ks = KeyStore.getInstance("AzureKeyVault"); +KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( + System.getProperty("azure.keyvault.uri"), + System.getProperty("azure.tenant.id"), + System.getProperty("azure.client.id"), + System.getProperty("azure.client.secret")); +ks.load(parameter); - KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); - kmf.init(ks, "".toCharArray()); +KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); +kmf.init(ks, "".toCharArray()); - SSLContext context = SSLContext.getInstance("TLS"); - context.init(kmf.getKeyManagers(), null, null); +SSLContext context = SSLContext.getInstance("TLS"); +context.init(kmf.getKeyManagers(), null, null); - SSLServerSocketFactory factory = (SSLServerSocketFactory) context.getServerSocketFactory(); - SSLServerSocket serverSocket = (SSLServerSocket) factory.createServerSocket(8765); +SSLServerSocketFactory factory = context.getServerSocketFactory(); +SSLServerSocket serverSocket = (SSLServerSocket) factory.createServerSocket(8765); ``` -Note if you want to use Azure managed identity, you should set the value +Note if you want to use Azure Managed Identity, you should set the value of `azure.keyvault.uri`, and the rest of the parameters would be `null`. ## Client side SSL @@ -53,75 +51,79 @@ of `azure.keyvault.uri`, and the rest of the parameters would be `null`. If you are looking to integrate the JCA provider for client side socket connections, see the Apache HTTP client example below. + + ```java - KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); - Security.addProvider(provider); - - KeyStore ks = KeyStore.getInstance("AzureKeyVault"); - KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( - System.getProperty("azure.keyvault.uri"), - System.getProperty("azure.tenant.id"), - System.getProperty("azure.client.id"), - System.getProperty("azure.client.secret")); - ks.load(parameter); - - SSLContext sslContext = SSLContexts - .custom() - .loadTrustMaterial(ks, new TrustSelfSignedStrategy()) - .build(); - - SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder - .create() - .setSslContext(sslContext) - .setHostnameVerifier((hostname, session) -> { - return true; - }) - .build(); - - PoolingHttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder - .create() - .setSSLSocketFactory(sslSocketFactory) - .build(); - - String result = null; - - try ( CloseableHttpClient client = HttpClients.custom().setConnectionManager(cm).build()) { - HttpGet httpGet = new HttpGet("https://localhost:8766"); - HttpClientResponseHandler responseHandler = (ClassicHttpResponse response) -> { - int status = response.getCode(); - String result1 = "Not success"; - if (status == 204) { - result1 = "Success"; - } - return result1; - }; - result = client.execute(httpGet, responseHandler); - } catch (IOException ioe) { - ioe.printStackTrace(); - } +KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); +Security.addProvider(provider); + +KeyStore ks = KeyStore.getInstance("AzureKeyVault"); +KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( + System.getProperty("azure.keyvault.uri"), + System.getProperty("azure.tenant.id"), + System.getProperty("azure.client.id"), + System.getProperty("azure.client.secret")); +ks.load(parameter); + +SSLContext sslContext = SSLContexts + .custom() + .loadTrustMaterial(ks, new TrustSelfSignedStrategy()) + .build(); + +SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder + .create() + .setSslContext(sslContext) + .setHostnameVerifier((hostname, session) -> { + return true; + }) + .build(); + +PoolingHttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder + .create() + .setSSLSocketFactory(sslSocketFactory) + .build(); + +String result = null; + +try (CloseableHttpClient client = HttpClients.custom().setConnectionManager(cm).build()) { + HttpGet httpGet = new HttpGet("https://localhost:8766"); + HttpClientResponseHandler responseHandler = (ClassicHttpResponse response) -> { + int status = response.getCode(); + String result1 = "Not success"; + if (status == 204) { + result1 = "Success"; + } + return result1; + }; + result = client.execute(httpGet, responseHandler); +} catch (IOException ioe) { + ioe.printStackTrace(); +} ``` Note if you want to use Azure managed identity, you should set the value of `azure.keyvault.uri`, and the rest of the parameters would be `null`. +# Troubleshooting + +# Next steps + ## Spring Boot -For Spring Boot applications see our [Spring Boot starter]. +For Spring Boot applications see our [Spring Boot starter](https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md). ## Reference 1. [Java Cryptography Architecture (JCA) Reference Guide](https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html) -# Azure KeyVault JCA client library for Java - -# Getting started - -# Key concepts - -# Examples +# Contributing -# Troubleshooting +## Testing the version under development -# Next steps +If you want to test the current version under development you will have to +build and install it into your local Maven repository. To do so use the +following command line: -# Contributing +``` + mvn clean install -DskipTests=true +``` diff --git a/sdk/keyvault/azure-security-keyvault-jca/pom.xml b/sdk/keyvault/azure-security-keyvault-jca/pom.xml index fc653e43be9b..89c2a0be13e5 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-jca/pom.xml @@ -16,7 +16,7 @@ azure-security-keyvault-jca 1.0.0-beta.2 JCA Provider for Azure Key Vault - The Java Crypto Architecture (JCA) Provider for Azure KeyVault + The Java Crypto Architecture (JCA) Provider for Azure Key Vault @@ -195,7 +195,7 @@ To run the integration tests pass in the following system properties - - azure.keyvault.uri - the KeyVault URI + - azure.keyvault.uri - the Azure Key Vault URI - azure.tenant.id - your tenant ID - azure.client.id - the (application) client ID - azure.client.secret - the (application) client secret diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultCertificate.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultCertificate.java deleted file mode 100644 index c37e93563046..000000000000 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultCertificate.java +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.security.keyvault.jca; - -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.Principal; -import java.security.PublicKey; -import java.security.SignatureException; -import java.security.cert.CertificateEncodingException; -import java.security.cert.CertificateException; -import java.security.cert.CertificateExpiredException; -import java.security.cert.CertificateNotYetValidException; -import java.security.cert.X509Certificate; -import java.util.Date; -import java.util.Set; - -/** - * The KeyVault certificate. - */ -class KeyVaultCertificate extends X509Certificate { - - /** - * Stores the delegate. - */ - private final X509Certificate delegate; - - /** - * Constructor. - * - * @param delegate the delegate. - */ - KeyVaultCertificate(X509Certificate delegate) { - super(); - this.delegate = delegate; - } - - /** - * @see X509Certificate#checkValidity() - */ - @Override - public void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException { - delegate.checkValidity(); - } - - /** - * @see X509Certificate#checkValidity(java.util.Date) - */ - @Override - public void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException { - delegate.checkValidity(date); - } - - /** - * @see X509Certificate#getBasicConstraints() - */ - @Override - public int getBasicConstraints() { - return delegate.getBasicConstraints(); - } - - /** - * @see X509Certificate#getCriticalExtensionOIDs() - */ - @Override - public Set getCriticalExtensionOIDs() { - return delegate.getCriticalExtensionOIDs(); - } - - /** - * @see X509Certificate#getEncoded() - */ - @Override - public byte[] getEncoded() throws CertificateEncodingException { - return delegate.getEncoded(); - } - - /** - * @see X509Certificate#getExtensionValue(java.lang.String) - */ - @Override - public byte[] getExtensionValue(String oid) { - return delegate.getExtensionValue(oid); - } - - /** - * @see X509Certificate#getIssuerDN() - */ - @Override - public Principal getIssuerDN() { - return delegate.getIssuerDN(); - } - - /** - * @see X509Certificate#getIssuerUniqueID() - */ - @Override - public boolean[] getIssuerUniqueID() { - return delegate.getIssuerUniqueID(); - } - - /** - * @see X509Certificate#getKeyUsage() - */ - @Override - public boolean[] getKeyUsage() { - return delegate.getKeyUsage(); - } - - /** - * @see X509Certificate#getNonCriticalExtensionOIDs() - */ - @Override - public Set getNonCriticalExtensionOIDs() { - return delegate.getNonCriticalExtensionOIDs(); - } - - /** - * @see X509Certificate#getNotAfter() - */ - @Override - public Date getNotAfter() { - return delegate.getNotAfter(); - } - - /** - * @see X509Certificate#getNotBefore() - */ - @Override - public Date getNotBefore() { - return delegate.getNotBefore(); - } - - /** - * @see X509Certificate#getPublicKey() - */ - @Override - public PublicKey getPublicKey() { - return delegate.getPublicKey(); - } - - /** - * @see X509Certificate#getSerialNumber() - */ - @Override - public BigInteger getSerialNumber() { - return delegate.getSerialNumber(); - } - - /** - * @see X509Certificate#getSigAlgName() - */ - @Override - public String getSigAlgName() { - return delegate.getSigAlgName(); - } - - /** - * @see X509Certificate#getSigAlgOID() - */ - @Override - public String getSigAlgOID() { - return delegate.getSigAlgOID(); - } - - /** - * @see X509Certificate#getSigAlgParams() - */ - @Override - public byte[] getSigAlgParams() { - return delegate.getSigAlgParams(); - } - - /** - * @see X509Certificate#getSignature() - */ - @Override - public byte[] getSignature() { - return delegate.getSignature(); - } - - /** - * @see X509Certificate#getSubjectDN() - */ - @Override - public Principal getSubjectDN() { - return delegate.getSubjectDN(); - } - - /** - * @see X509Certificate#getSubjectUniqueID() - */ - @Override - public boolean[] getSubjectUniqueID() { - return delegate.getSubjectUniqueID(); - } - - /** - * @see X509Certificate#getTBSCertificate() - */ - @Override - public byte[] getTBSCertificate() throws CertificateEncodingException { - return delegate.getTBSCertificate(); - } - - /** - * @see X509Certificate#getVersion() - */ - @Override - public int getVersion() { - return delegate.getVersion(); - } - - /** - * @see X509Certificate#hasUnsupportedCriticalExtension() - */ - @Override - public boolean hasUnsupportedCriticalExtension() { - return delegate.hasUnsupportedCriticalExtension(); - } - - /** - * @see X509Certificate#toString() - */ - @Override - public String toString() { - return delegate.toString(); - } - - /** - * @see X509Certificate#verify(java.security.PublicKey) - */ - @Override - public void verify(PublicKey key) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, - NoSuchProviderException, SignatureException { - delegate.verify(key); - } - - /** - * @see X509Certificate#verify(java.security.PublicKey, java.security.Provider) - */ - @Override - public void verify(PublicKey key, String sigProvider) throws CertificateException, NoSuchAlgorithmException, - InvalidKeyException, NoSuchProviderException, SignatureException { - delegate.verify(key, sigProvider); - } -} diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java index 0bb01049216b..d9ec569489f6 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java @@ -34,7 +34,7 @@ import static java.util.logging.Level.WARNING; /** - * The REST client specific to Azure KeyVault. + * The REST client specific to Azure Key Vault. */ class KeyVaultClient extends DelegateRestClient { @@ -49,7 +49,7 @@ class KeyVaultClient extends DelegateRestClient { private static final String API_VERSION_POSTFIX = "?api-version=7.1"; /** - * Stores the KeyVault URI. + * Stores the Azure Key Vault URI. */ private final String keyVaultUri; @@ -71,11 +71,11 @@ class KeyVaultClient extends DelegateRestClient { /** * Constructor. * - * @param keyVaultUri the KeyVault URI. + * @param keyVaultUri the Azure Key Vault URI. */ KeyVaultClient(String keyVaultUri) { super(RestClientFactory.createClient()); - LOGGER.log(INFO, "Using KeyVault: {0}", keyVaultUri); + LOGGER.log(INFO, "Using Azure Key Vault: {0}", keyVaultUri); if (!keyVaultUri.endsWith("/")) { keyVaultUri = keyVaultUri + "/"; } @@ -85,7 +85,7 @@ class KeyVaultClient extends DelegateRestClient { /** * Constructor. * - * @param keyVaultUri the KeyVault URI. + * @param keyVaultUri the Azure Key Vault URI. * @param tenantId the tenant ID. * @param clientId the client ID. * @param clientSecret the client secret. @@ -212,8 +212,8 @@ public Key getKey(String alias, char[] password) { .orElse(false); if (isExportable) { // Because the certificate is exportable the private key is - // available. So we'll use the KeyVault Secrets API to get the - // private key. + // available. So we'll use the Azure Key Vault Secrets API to get + // the private key. String certificateSecretUri = certificateBundle.getSid(); HashMap headers = new HashMap<>(); headers.put("Authorization", "Bearer " + getAccessToken()); diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultJcaProvider.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultJcaProvider.java index c91b441867ac..36ab7044ec82 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultJcaProvider.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultJcaProvider.java @@ -10,7 +10,7 @@ import java.util.Collections; /** - * The Azure KeyVault security provider. + * The Azure Key Vault security provider. */ public class KeyVaultJcaProvider extends Provider { @@ -22,7 +22,7 @@ public class KeyVaultJcaProvider extends Provider { /** * Stores the information. */ - private static final String INFO = "Azure KeyVault JCA Provider"; + private static final String INFO = "Azure Key Vault JCA Provider"; /** * Stores the name. diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java index 247f61bcd71a..cdeeb542a62d 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java @@ -22,7 +22,7 @@ import static java.util.logging.Level.WARNING; /** - * The KeyVault variant of the X509ExtendedKeyManager. + * The Azure Key Vault variant of the X509ExtendedKeyManager. */ public class KeyVaultKeyManager extends X509ExtendedKeyManager { @@ -63,8 +63,8 @@ public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket so String alias = null; try { /* - * If we only have one alias and the keystore type is not 'AzureKeyVault' - * return that alias as a match. + * If we only have one alias and the keystore type is not + * 'AzureKeyVault' return that alias as a match. */ if (!keystore.getProvider().getName().equals("AzureKeyVault") && keystore.size() == 1) { @@ -87,8 +87,8 @@ public String chooseServerAlias(String keyType, Principal[] issuers, Socket sock String alias = null; try { /* - * If we only have one alias and the keystore type is not 'AzureKeyVault' - * return that alias as a match. + * If we only have one alias and the keystore type is not + * 'AzureKeyVault' return that alias as a match. */ if (!keystore.getProvider().getName().equals("AzureKeyVault") && keystore.size() == 1) { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManagerFactory.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManagerFactory.java index 7f1bf1e43648..d9a51c48d9b7 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManagerFactory.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManagerFactory.java @@ -12,7 +12,7 @@ import java.util.logging.Logger; /** - * The KeyVault variant of the KeyManagerFactory. + * The Azure Key Vault variant of the KeyManagerFactory. */ public class KeyVaultKeyManagerFactory extends KeyManagerFactorySpi { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java index 46e12d87f41f..3ca71ec2d8f3 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java @@ -32,7 +32,7 @@ import static java.util.logging.Level.WARNING; /** - * The Azure KeyVault implementation of the KeyStoreSpi. + * The Azure Key Vault implementation of the KeyStoreSpi. */ public class KeyVaultKeyStore extends KeyStoreSpi { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameter.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameter.java index 5a1e616eb168..b7900e044c62 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameter.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameter.java @@ -6,7 +6,7 @@ import java.security.KeyStore; /** - * The Azure KeyVault LoadStoreParameter of the KeyStoreSpi. + * The Azure Key Vault LoadStoreParameter of the KeyStoreSpi. */ public class KeyVaultLoadStoreParameter implements KeyStore.LoadStoreParameter { @@ -33,7 +33,7 @@ public class KeyVaultLoadStoreParameter implements KeyStore.LoadStoreParameter { /** * Constructor. * - * @param uri the KeyVault URI. + * @param uri the Azure Key Vault URI. * @param tenantId the tenant ID. * @param clientId the client ID. * @param clientSecret the client secret. diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java index 0a35624aeb87..b5be3dc3f3f0 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java @@ -17,7 +17,7 @@ import javax.net.ssl.X509ExtendedTrustManager; /** - * The KeyVault variant of the X509TrustManager. + * The Azure Key Vault variant of the X509TrustManager. */ public class KeyVaultTrustManager extends X509ExtendedTrustManager implements X509TrustManager { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactory.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactory.java index 73d1e4abe696..1ac87af72425 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactory.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactory.java @@ -12,7 +12,7 @@ import java.util.logging.Logger; /** - * The KeyVault variant of the TrustManagerFactory. + * The Azure Key Vault variant of the TrustManagerFactory. */ public class KeyVaultTrustManagerFactory extends TrustManagerFactorySpi { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactoryProvider.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactoryProvider.java index a70efe2ca1e6..9c2b5bb44c91 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactoryProvider.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactoryProvider.java @@ -8,7 +8,7 @@ import java.security.Provider; /** - * The Azure KeyVault TrustManagerFactory provider. + * The Azure Key Vault TrustManagerFactory provider. */ public class KeyVaultTrustManagerFactoryProvider extends Provider { @@ -20,7 +20,7 @@ public class KeyVaultTrustManagerFactoryProvider extends Provider { /** * Stores the information. */ - private static final String INFO = "Azure KeyVault TrustManagerFactory Provider"; + private static final String INFO = "Azure Key Vault TrustManagerFactory Provider"; /** * Stores the name. diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/package-info.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/package-info.java index e40cd274cf58..8fcebe98b355 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/package-info.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/package-info.java @@ -2,6 +2,6 @@ // Licensed under the MIT License. /** - * The Azure KeyVault JCA Provider package. + * The Azure Key Vault JCA Provider package. */ package com.azure.security.keyvault.jca; diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ClientSSLSample.java b/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ClientSSLSample.java new file mode 100644 index 000000000000..5d9ad11792ea --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ClientSSLSample.java @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package sample; + +import com.azure.security.keyvault.jca.KeyVaultJcaProvider; +import com.azure.security.keyvault.jca.KeyVaultLoadStoreParameter; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder; +import org.apache.hc.client5.http.ssl.TrustSelfSignedStrategy; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.io.HttpClientResponseHandler; +import org.apache.hc.core5.ssl.SSLContexts; + +import javax.net.ssl.SSLContext; +import java.io.IOException; +import java.security.KeyStore; +import java.security.Security; + +/** + * The ClientSSL sample. + */ +public class ClientSSLSample { + + public void clientSSLSample() throws Exception { + KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); + Security.addProvider(provider); + + KeyStore ks = KeyStore.getInstance("AzureKeyVault"); + KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( + System.getProperty("azure.keyvault.uri"), + System.getProperty("azure.tenant.id"), + System.getProperty("azure.client.id"), + System.getProperty("azure.client.secret")); + ks.load(parameter); + + SSLContext sslContext = SSLContexts + .custom() + .loadTrustMaterial(ks, new TrustSelfSignedStrategy()) + .build(); + + SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder + .create() + .setSslContext(sslContext) + .setHostnameVerifier((hostname, session) -> { + return true; + }) + .build(); + + PoolingHttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder + .create() + .setSSLSocketFactory(sslSocketFactory) + .build(); + + String result = null; + + try (CloseableHttpClient client = HttpClients.custom().setConnectionManager(cm).build()) { + HttpGet httpGet = new HttpGet("https://localhost:8766"); + HttpClientResponseHandler responseHandler = (ClassicHttpResponse response) -> { + int status = response.getCode(); + String result1 = "Not success"; + if (status == 204) { + result1 = "Success"; + } + return result1; + }; + result = client.execute(httpGet, responseHandler); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } +} diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ServerSSLSample.java b/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ServerSSLSample.java new file mode 100644 index 000000000000..e5e0a7ea40a6 --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ServerSSLSample.java @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package sample; + +import com.azure.security.keyvault.jca.KeyVaultJcaProvider; +import com.azure.security.keyvault.jca.KeyVaultLoadStoreParameter; + +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLServerSocket; +import javax.net.ssl.SSLServerSocketFactory; +import java.security.KeyStore; +import java.security.Security; + +/** + * The ServerSSL sample. + */ +public class ServerSSLSample { + + public void serverSSLSample() throws Exception { + KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); + Security.addProvider(provider); + + KeyStore ks = KeyStore.getInstance("AzureKeyVault"); + KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( + System.getProperty("azure.keyvault.uri"), + System.getProperty("azure.tenant.id"), + System.getProperty("azure.client.id"), + System.getProperty("azure.client.secret")); + ks.load(parameter); + + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(ks, "".toCharArray()); + + SSLContext context = SSLContext.getInstance("TLS"); + context.init(kmf.getKeyManagers(), null, null); + + SSLServerSocketFactory factory = context.getServerSocketFactory(); + SSLServerSocket serverSocket = (SSLServerSocket) factory.createServerSocket(8765); + } +} diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/AuthClientTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/AuthClientTest.java index c77edab01251..8c37367078c6 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/AuthClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/AuthClientTest.java @@ -11,8 +11,6 @@ /** * The JUnit test for the AuthClient. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class AuthClientTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/DelegateRestClientTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/DelegateRestClientTest.java index 94d534680dfe..fdcf6a250846 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/DelegateRestClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/DelegateRestClientTest.java @@ -9,8 +9,6 @@ /** * The JUnit tests for the DelegateRestClient class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class DelegateRestClientTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/JacksonJsonConverterTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/JacksonJsonConverterTest.java index 5ad5273d2f7d..2a4ea9e39708 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/JacksonJsonConverterTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/JacksonJsonConverterTest.java @@ -12,8 +12,6 @@ /** * The JUnit tests for the JsonbJsonConverter class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class JacksonJsonConverterTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultCertificateTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultCertificateTest.java deleted file mode 100644 index ee521e308f08..000000000000 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultCertificateTest.java +++ /dev/null @@ -1,369 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.security.keyvault.jca; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.io.ByteArrayInputStream; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.ProviderException; -import java.security.PublicKey; -import java.security.SignatureException; -import java.security.cert.CertificateEncodingException; -import java.security.cert.CertificateException; -import java.security.cert.CertificateExpiredException; -import java.security.cert.CertificateFactory; -import java.security.cert.CertificateNotYetValidException; -import java.security.cert.X509Certificate; -import java.util.Base64; -import java.util.Calendar; -import java.util.Date; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - -/** - * The JUnit tests for the KeyVaultCertificate class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) - */ -public class KeyVaultCertificateTest { - - /** - * Stores the CER test certificate (which is valid til 2120). - */ - private static final String TEST_CERTIFICATE - = "MIIDeDCCAmCgAwIBAgIQGghBu97rQJKNnUHPWU7xjDANBgkqhkiG9w0BAQsFADAk" - + "MSIwIAYDVQQDExlodW5kcmVkLXllYXJzLmV4YW1wbGUuY29tMCAXDTIwMDkwMjE3" - + "NDUyNFoYDzIxMjAwOTAyMTc1NTI0WjAkMSIwIAYDVQQDExlodW5kcmVkLXllYXJz" - + "LmV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuU14" - + "btkN5wmcO2WKXqm1NUKXzi79EtqiFFkrLgPAwj5NNwMw2Akm3GpdEpwkJ8/q3l7d" - + "frDEVOO9gwZbz7xppyqutjxjllw8CCgjFdfK02btz56CGgh3X25ZZtzPbuMZJM0j" - + "o4mVEdaFNJ0eUeMppS0DcbbuTWCF7Jf1gvr8GVqx+E0IJUFkE+D4kdTbnJSaeK0A" - + "KEt94z88MPX18h8ud14uRVmUCYVZrZeswdE2tO1BpazrXELHuXCtrjGxsDDjDzeP" - + "98aFI9kblkqoJS4TsmloLEjwZLm80cyJDEmpXXMtR7C0FFXFI1BAtIa4mxSgBLsT" - + "L4GVPEGNANR8COYkHQIDAQABo4GjMIGgMA4GA1UdDwEB/wQEAwIFoDAJBgNVHRME" - + "AjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAkBgNVHREEHTAbghlo" - + "dW5kcmVkLXllYXJzLmV4YW1wbGUuY29tMB8GA1UdIwQYMBaAFOGTt4H3ho30O4e+" - + "hebwJjm2VMvIMB0GA1UdDgQWBBThk7eB94aN9DuHvoXm8CY5tlTLyDANBgkqhkiG" - + "9w0BAQsFAAOCAQEAGp8mCioVCmM+kZv6r+K2j2uog1k4HBwN1NfRoSsibDB8+QXF" - + "bmNf3M0imiuR/KJgODyuROwaa/AalxNFMOP8XTL2YmP7XsddBs9ONHHQXKjY/Ojl" - + "PsIPR7vZjwYPfEB+XEKl2fOIxDQQ921POBV7M6DdTC49T5X+FsLR1AIIfinVetT9" - + "QmNuvzulBX0T0rea/qpcPK4HTj7ToyImOaf8sXRv2s2ODLUrKWu5hhTNH2l6RIkQ" - + "U/aIAdQRfDaSE9jhtcVu5d5kCgBs7nz5AzeCisDPo5zIt4Mxej3iVaAJ79oEbHOE" - + "p192KLXLV/pscA4Wgb+PJ8AAEa5B6xq8p9JO+Q=="; - - /** - * Stores the X.509 certificate. - */ - private X509Certificate x509Certificate; - - /** - * Setup before each test. - * - */ - @BeforeEach - public void setUp() { - try { - byte[] certificateBytes = Base64.getDecoder().decode(TEST_CERTIFICATE); - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - x509Certificate = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certificateBytes)); - } catch (CertificateException e) { - throw new ProviderException(e); - } - } - - /** - * Test checkValidity method. - */ - @Test - public void testCheckValidity() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - certificate.checkValidity(); - } catch (CertificateExpiredException | CertificateNotYetValidException cnyve) { - fail(); - } - } - - /** - * Test checkValidity method. - */ - @Test - public void testCheckValidity2() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - certificate.checkValidity(new Date(100, Calendar.FEBRUARY, 1)); - fail(); - } catch (CertificateExpiredException ex) { - fail(); - } catch (CertificateNotYetValidException exception) { - // expecting this as the TEST_CERTIFICATE is not valid against given date. - } - } - - /** - * Test checkValidity method. - */ - @Test - public void testCheckValidity3() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - certificate.checkValidity(new Date(200, Calendar.FEBRUARY, 1)); - } catch (CertificateExpiredException | CertificateNotYetValidException exception) { - fail(); - } - } - - /** - * Test getBasicConstraints method. - */ - @Test - public void testGetBasicConstraints() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals(-1, certificate.getBasicConstraints()); - } - - /** - * Test getCriticalExtensionOIDs method. - */ - @Test - public void testGetCriticalExtensionOIDs() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - Set criticalExtensions = certificate.getCriticalExtensionOIDs(); - assertFalse(criticalExtensions.isEmpty()); - assertTrue(criticalExtensions.contains("2.5.29.15")); - } - - /** - * Test getEncoded method. - */ - @Test - public void testGetEncoded() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getEncoded()); - } catch (CertificateEncodingException cee) { - fail(); - } - } - - /** - * Test getExtensionValue method. - */ - @Test - public void testGetExtensionValue() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getExtensionValue("2.5.29.15")); - } - - /** - * Test getIssuerDN method. - */ - @Test - public void testGetIssuerDN() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals("CN=hundred-years.example.com", certificate.getIssuerDN().getName()); - } - - /** - * Test getIssuerUniqueID method. - */ - @Test - public void testGetIssuerUniqueID() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNull(certificate.getIssuerUniqueID()); - } - - /** - * Test getKeyUsage method. - */ - @Test - public void testGetKeyUsage() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getKeyUsage()); - } - - /** - * Test getNonCriticalExtensionOIDs method. - */ - @Test - public void testGetNonCriticalExtensionOIDs() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - Set nonCriticalExtensions = certificate.getNonCriticalExtensionOIDs(); - assertFalse(nonCriticalExtensions.isEmpty()); - } - - /** - * Test getNotAfter method. - */ - @Test - public void testGetNotAfter() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - Date notAfter = certificate.getNotAfter(); - assertTrue(new Date().before(notAfter)); - } - - /** - * Test getNotBefore method. - */ - @Test - public void testGetNotBefore() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - Date notBefore = certificate.getNotBefore(); - assertTrue(new Date().after(notBefore)); - } - - /** - * Test getPublicKey method. - */ - @Test - public void testGetPublicKey() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getPublicKey()); - } - - /** - * Test getSerialNumber method. - */ - @Test - public void testGetSerialNumber() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getSerialNumber()); - } - - /** - * Test getSigAlgName method. - */ - @Test - public void testGetSigAlgName() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals("SHA256withRSA", certificate.getSigAlgName()); - } - - /** - * Test getSigAlgOID method. - */ - @Test - public void testGetSigAlgOID() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals("1.2.840.113549.1.1.11", certificate.getSigAlgOID()); - } - - /** - * Test getSigAlgParams method. - */ - @Test - public void testGetSigAlgParams() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNull(certificate.getSigAlgParams()); - } - - /** - * Test getSignature method. - */ - @Test - public void testGetSignature() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getSignature()); - } - - /** - * Test getSubjectDN method. - */ - @Test - public void testGetSubjectDN() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals("CN=hundred-years.example.com", certificate.getSubjectDN().getName()); - } - - /** - * Test getSubjectUniqueID method. - */ - @Test - public void testGetSubjectUniqueID() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNull(certificate.getSubjectUniqueID()); - } - - /** - * Test getTBSCertificate method. - */ - @Test - public void testGetTBSCertificate() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getTBSCertificate()); - } catch (CertificateEncodingException cee) { - fail(); - } - } - - /** - * Test getVersion method. - */ - @Test - public void testGetVersion() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals(3, certificate.getVersion()); - } - - /** - * Test hasUnsupportedCriticalExtension method. - */ - @Test - public void testHasUnsupportedCriticalExtension() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertFalse(certificate.hasUnsupportedCriticalExtension()); - } - - /** - * Test toString method. - */ - @Test - public void testToString() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.toString()); - } - - /** - * Test verify method. - */ - @Test - public void testVerify() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - PublicKey publicKey = certificate.getPublicKey(); - certificate.verify(publicKey); - } catch (CertificateException | NoSuchAlgorithmException - | InvalidKeyException | NoSuchProviderException - | SignatureException e) { - fail(); - } - } - - /** - * Test verify method. - */ - @Test - public void testVerify2() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - PublicKey publicKey = certificate.getPublicKey(); - certificate.verify(publicKey, "SunRsaSign"); - } catch (CertificateException | NoSuchAlgorithmException - | InvalidKeyException | NoSuchProviderException - | SignatureException e) { - fail(); - } - } -} diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultJcaProviderTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultJcaProviderTest.java index 7940baa2c917..4fdd9ceaed87 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultJcaProviderTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultJcaProviderTest.java @@ -13,8 +13,6 @@ /** * The JUnit tests for the KeyVaultProvider class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class KeyVaultJcaProviderTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreTest.java index 1d016bf85f0a..073cfb99a4b4 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreTest.java @@ -19,8 +19,6 @@ /** * The JUnit tests for the KeyVaultKeyStore class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class KeyVaultKeyStoreTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameterTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameterTest.java index 727dca026e32..68912a740c48 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameterTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameterTest.java @@ -9,8 +9,6 @@ /** * The JUnit tests for the KeyVaultLoadStoreParameter class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class KeyVaultLoadStoreParameterTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/LegacyRestClientTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/LegacyRestClientTest.java index 730a6867f19e..643930bbe643 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/LegacyRestClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/LegacyRestClientTest.java @@ -9,8 +9,6 @@ /** * The JUnit tests for the LegacyRestClient class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class LegacyRestClientTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/RestClientFactoryTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/RestClientFactoryTest.java index c99550db7609..c22b88ebad91 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/RestClientFactoryTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/RestClientFactoryTest.java @@ -9,8 +9,6 @@ /** * The JUnit tests for the RestClientFactory class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class RestClientFactoryTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/ServerSocketTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/ServerSocketTest.java index 4b2f4c1e9f50..13690522dfb7 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/ServerSocketTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/ServerSocketTest.java @@ -30,9 +30,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; /** - * The unit test validating the ServerSocket is created using a certificate from Azure KeyVault. - * - * @author Manfred Riem (manfred.riem@microsoft.com) + * The unit test validating the ServerSocket is created using a certificate + * from Azure Key Vault. */ public class ServerSocketTest { @@ -53,7 +52,7 @@ public void testServerSocket() throws Exception { /* * Setup server side. * - * - Create an Azure KeyVault specific instance of a KeyStore. + * - Create an Azure Key Vault specific instance of a KeyStore. * - Set the KeyManagerFactory to use that KeyStore. * - Set the SSL context to use the KeyManagerFactory. * - Create the SSLServerSocket using th SSL context. @@ -158,7 +157,7 @@ public void testServerSocketWithSelfSignedClientTrust() throws Exception { /* * Setup server side. * - * - Create an Azure KeyVault specific instance of a KeyStore. + * - Create an Azure Key Vault specific instance of a KeyStore. * - Set the KeyManagerFactory to use that KeyStore. * - Set the SSL context to use the KeyManagerFactory. * - Create the SSLServerSocket using th SSL context. diff --git a/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates/src/main/resources/application.properties b/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates/src/main/resources/application.properties index 932545d08d83..5f83c4b43b25 100644 --- a/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates/src/main/resources/application.properties +++ b/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates/src/main/resources/application.properties @@ -1,20 +1,20 @@ -# The URI to the Azure KeyVault used +# The URI to the Azure Key Vault used azure.keyvault.uri=${AZURE_KEYVAULT_URI} -# The alias corresponding to the certificate in Azure KeyVault. +# The alias corresponding to the certificate in Azure Key Vault. server.ssl.key-alias=${SERVER_SSL_KEY_ALIAS} -# The keystore type that enables the use of Azure KeyVault for your server-side +# The keystore type that enables the use of Azure Key Vault for your server-side # SSL certificate. server.ssl.key-store-type=AzureKeyVault -# The truststore type that enables the use of Azure KeyVault for trusted +# The truststore type that enables the use of Azure Key Vault for trusted # certificates, a.k.a the ones you trust when making an outbound SSL connection # server.ssl.trust-store-type=AzureKeyVault -# The Tenant ID for your Azure KeyVault (needed if you are not using managed +# The Tenant ID for your Azure Key Vault (needed if you are not using managed # identity). azure.keyvault.tenantId=${AZURE_KEYVAULT_TENTANT_ID} -# The Client ID that has been setup with access to your Azure KeyVault (needed +# The Client ID that has been setup with access to your Azure Key Vault (needed # if you are not using managed identity). azure.keyvault.clientId=${AZURE_KEYVAULT_CLIENT_ID} -# The Client Secret that will be used for accessing your Azure KeyVault (needed +# The Client Secret that will be used for accessing your Azure Key Vault (needed # if you are not using managed identity). azure.keyvault.clientSecret=${AZURE_KEYVAULT_CLIENT_SECRET} # The server port. diff --git a/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md b/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md index e32959f329f4..24f5341cc998 100644 --- a/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md +++ b/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md @@ -5,16 +5,16 @@ ### Using a managed identity To use the starter for server side SSL, you will need to add the following to -your application.properties (if the application is using Spring Cloud Config -Server for its configuration add it to the bootstrap.yml of the application) +your `application.properties` (if the application is using Spring Cloud Config +Server for its configuration add it to the `bootstrap.yml` of the application) ``` -azure.keyvault.uri= -server.ssl.key-alias= +azure.keyvault.uri= +server.ssl.key-alias= server.ssl.key-store-type=AzureKeyVault ``` -Note: make sure the managed identity has access to the Azure KeyVault to access +Note: make sure the managed identity has access to the Azure Key Vault to access keys, secrets and certificates. Add then add the following Maven dependency to your POM file. @@ -29,19 +29,19 @@ Add then add the following Maven dependency to your POM file. ### Using a client ID and client secret To use the starter for server side SSL, you will need to add the following to -your application.properties (if the application is using Spring Cloud Config -Server for its configuration add it to the bootstrap.yml of the application) +your `application.properties` (if the application is using Spring Cloud Config +Server for its configuration add it to the `bootstrap.yml` of the application) ``` -azure.keyvault.uri= +azure.keyvault.uri= azure.keyvault.tenantId= -azure.keyvault.clientId= +azure.keyvault.clientId= azure.keyvault.clientSecret= -server.ssl.key-alias= +server.ssl.key-alias= server.ssl.key-store-type=AzureKeyVault ``` -Note: make sure the client ID has access to the Azure KeyVault to access +Note: make sure the client ID has access to the Azure Key Vault to access keys, secrets and certificates. Add then add the following Maven dependency to your POM file. @@ -58,13 +58,13 @@ Add then add the following Maven dependency to your POM file. ### Using a managed identity To use the starter for client side SSL, you will need to add the following to -your application.properties (if the application is using Spring Cloud Config -Server for its configuration add it to the bootstrap.yml of the application) +your `application.properties` (if the application is using Spring Cloud Config +Server for its configuration add it to the `bootstrap.yml` of the application) ``` -azure.keyvault.uri= +azure.keyvault.uri= ``` -Note: make sure the managed identity has access to the Azure KeyVault to access +Note: make sure the managed identity has access to the Azure Key Vault to access keys, secrets and certificates. Add then add the following Maven dependency to your POM file. @@ -76,7 +76,7 @@ Add then add the following Maven dependency to your POM file. ``` -If you are using RestTemplate use code similar to the example below. +If you are using `RestTemplate` use code similar to the example below. ```java @Bean @@ -104,17 +104,17 @@ If you are using RestTemplate use code similar to the example below. ### Using a client ID and client secret To use the starter for client side SSL, you will need to add the following to -your application.properties (if the application is using Spring Cloud Config -Server for its configuration add it to the bootstrap.yml of the application) +your `application.properties` (if the application is using Spring Cloud Config +Server for its configuration add it to the `bootstrap.yml` of the application) ``` -azure.keyvault.uri= +azure.keyvault.uri= azure.keyvault.tenantId= -azure.keyvault.clientId= +azure.keyvault.clientId= azure.keyvault.clientSecret= ``` -Note: make sure the client ID has access to the Azure KeyVault to access +Note: make sure the client ID has access to the Azure Key Vault to access keys, secrets and certificates. Add then add the following Maven dependency to your POM file. @@ -126,7 +126,7 @@ Add then add the following Maven dependency to your POM file. ``` -Then if you are using RestTemplate use the code below as a starting +Then if you are using `RestTemplate` use the code below as a starting point: ```java @@ -161,7 +161,7 @@ to add the following configuration: ```yaml azure: keyvault: - uri: + uri: jca: overrideTrustManagerFactory: true ``` @@ -180,8 +180,8 @@ azure: ``` If you are developing you can completely disable the certificate and hostname -validation altogether by using the configuration below. Note this is NOT -recommended for production! +validation altogether by using the configuration below. **Note this is NOT +recommended for production!** ```yaml spring: @@ -194,7 +194,7 @@ spring: ## Creating an Azure Key Vault -To create an Azure KeyVault use the command line below: +To create an Azure Key Vault use the command line below: ```shell export KEY_VAULT=mykeyvault @@ -246,14 +246,14 @@ Notes: 1. The alias (certificate name) is constructed from the filename of the certificate (minus the extension). So if your filename is `mycert.x509` the certificate will be added with the alias of `mycert`. -2. Certificates coming from Azure KeyVault take precedence over +2. Certificates coming from Azure Key Vault take precedence over side-loaded certificates. ## Testing the current version under development If you want to test the current version under development you will have to -1. Build and install the [Microsoft Azure JCA Provider] for KeyVault +1. Build and install the [Azure Key Vault JCA client library for Java](https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/keyvault/azure-security-keyvault-jca/README.md) 1. Build and install this starter. To build and install the starter use the following command line: @@ -263,7 +263,7 @@ To build and install the starter use the following command line: ``` -# Azure KeyVault Certificates client library for Java +# Azure Key Vault Certificates client library for Java # Getting started From ce4db6567cf9a755a487688a6a4248743095f317 Mon Sep 17 00:00:00 2001 From: Manfred Riem Date: Mon, 26 Oct 2020 00:42:44 -0600 Subject: [PATCH 22/24] End to End TLS SSL step #3 (#16773) * Renamed keyVault to keyVaultClient * Rename from getKey_props to getKeyProperties * Changed from access_token to accessToken Co-authored-by: Rujun Chen --- .../security/keyvault/jca/AuthClient.java | 6 +- .../security/keyvault/jca/KeyVaultClient.java | 20 +++--- .../keyvault/jca/KeyVaultKeyManager.java | 2 + .../keyvault/jca/KeyVaultKeyStore.java | 66 ++++++++++--------- .../keyvault/jca/KeyVaultTrustManager.java | 2 +- .../keyvault/jca/rest/CertificatePolicy.java | 6 +- .../keyvault/jca/rest/OAuthToken.java | 12 ++-- ...tCertificatesEnvironmentPostProcessor.java | 10 +-- 8 files changed, 63 insertions(+), 61 deletions(-) diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/AuthClient.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/AuthClient.java index 7fab5629bce9..e3684ed39b69 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/AuthClient.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/AuthClient.java @@ -116,7 +116,7 @@ public String getAccessToken(String resource, String tenantId, if (body != null) { JsonConverter converter = JsonConverterFactory.createJsonConverter(); OAuthToken token = (OAuthToken) converter.fromJson(body, OAuthToken.class); - result = token.getAccess_token(); + result = token.getAccessToken(); } LOGGER.log(FINER, "Access token: {0}", result); return result; @@ -146,7 +146,7 @@ private String getAccessTokenOnAppService(String resource) { if (body != null) { JsonConverter converter = JsonConverterFactory.createJsonConverter(); OAuthToken token = (OAuthToken) converter.fromJson(body, OAuthToken.class); - result = token.getAccess_token(); + result = token.getAccessToken(); } LOGGER.exiting("AuthClient", "getAccessTokenOnAppService", result); return result; @@ -174,7 +174,7 @@ private String getAccessTokenOnOthers(String resource) { if (body != null) { JsonConverter converter = JsonConverterFactory.createJsonConverter(); OAuthToken token = (OAuthToken) converter.fromJson(body, OAuthToken.class); - result = token.getAccess_token(); + result = token.getAccessToken(); } LOGGER.exiting("AuthClient", "getAccessTokenOnOthers", result); return result; diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java index d9ec569489f6..d11a7ae0386a 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java @@ -49,9 +49,9 @@ class KeyVaultClient extends DelegateRestClient { private static final String API_VERSION_POSTFIX = "?api-version=7.1"; /** - * Stores the Azure Key Vault URI. + * Stores the Azure Key Vault URL. */ - private final String keyVaultUri; + private final String keyVaultUrl; /** * Stores the tenant ID. @@ -79,7 +79,7 @@ class KeyVaultClient extends DelegateRestClient { if (!keyVaultUri.endsWith("/")) { keyVaultUri = keyVaultUri + "/"; } - this.keyVaultUri = keyVaultUri; + this.keyVaultUrl = keyVaultUri; } /** @@ -125,11 +125,11 @@ private String getAccessToken() { * * @return the list of aliases. */ - public List getAliases() { + List getAliases() { ArrayList result = new ArrayList<>(); HashMap headers = new HashMap<>(); headers.put("Authorization", "Bearer " + getAccessToken()); - String url = String.format("%scertificates%s", keyVaultUri, API_VERSION_POSTFIX); + String url = String.format("%scertificates%s", keyVaultUrl, API_VERSION_POSTFIX); String response = get(url, headers); CertificateListResult certificateListResult = null; if (response != null) { @@ -156,7 +156,7 @@ private CertificateBundle getCertificateBundle(String alias) { CertificateBundle result = null; HashMap headers = new HashMap<>(); headers.put("Authorization", "Bearer " + getAccessToken()); - String url = String.format("%scertificates/%s%s", keyVaultUri, alias, API_VERSION_POSTFIX); + String url = String.format("%scertificates/%s%s", keyVaultUrl, alias, API_VERSION_POSTFIX); String response = get(url, headers); if (response != null) { JsonConverter converter = JsonConverterFactory.createJsonConverter(); @@ -171,7 +171,7 @@ private CertificateBundle getCertificateBundle(String alias) { * @param alias the alias. * @return the certificate, or null if not found. */ - public Certificate getCertificate(String alias) { + Certificate getCertificate(String alias) { LOGGER.entering("KeyVaultClient", "getCertificate", alias); LOGGER.log(INFO, "Getting certificate for alias: {0}", alias); X509Certificate certificate = null; @@ -182,7 +182,7 @@ public Certificate getCertificate(String alias) { try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); certificate = (X509Certificate) cf.generateCertificate( - new ByteArrayInputStream(Base64.getDecoder().decode(certificateBundle.getCer())) + new ByteArrayInputStream(Base64.getDecoder().decode(certificateString)) ); } catch (CertificateException ce) { LOGGER.log(WARNING, "Certificate error", ce); @@ -200,14 +200,14 @@ public Certificate getCertificate(String alias) { * @param password the password. * @return the key. */ - public Key getKey(String alias, char[] password) { + Key getKey(String alias, char[] password) { LOGGER.entering("KeyVaultClient", "getKey", new Object[] { alias, password }); LOGGER.log(INFO, "Getting key for alias: {0}", alias); Key key = null; CertificateBundle certificateBundle = getCertificateBundle(alias); boolean isExportable = Optional.ofNullable(certificateBundle) .map(CertificateBundle::getPolicy) - .map(CertificatePolicy::getKey_props) + .map(CertificatePolicy::getKeyProperties) .map(KeyProperties::isExportable) .orElse(false); if (isExportable) { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java index cdeeb542a62d..1cf099d84b0f 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java @@ -127,6 +127,8 @@ public X509Certificate[] getCertificateChain(String alias) { chain.add((X509Certificate) certificate); } } + } else { + LOGGER.log(WARNING, "No certificate chain found for alias: {0}", alias); } } catch (KeyStoreException kse) { LOGGER.log(WARNING, "Unable to get certificate chain for alias: " + alias, kse); diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java index 3ca71ec2d8f3..634a6e1924fe 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java @@ -1,6 +1,5 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. - package com.azure.security.keyvault.jca; import java.io.BufferedReader; @@ -64,7 +63,7 @@ public class KeyVaultKeyStore extends KeyStoreSpi { /** * Stores the key vault client. */ - private KeyVaultClient keyVault; + private KeyVaultClient keyVaultClient; /** * Constructor. @@ -83,13 +82,13 @@ public KeyVaultKeyStore() { String tenantId = System.getProperty("azure.keyvault.tenantId"); String clientId = System.getProperty("azure.keyvault.clientId"); String clientSecret = System.getProperty("azure.keyvault.clientSecret"); - keyVault = new KeyVaultClient(keyVaultUri, tenantId, clientId, clientSecret); + keyVaultClient = new KeyVaultClient(keyVaultUri, tenantId, clientId, clientSecret); } @Override public Enumeration engineAliases() { if (aliases == null) { - aliases = keyVault.getAliases(); + aliases = keyVaultClient.getAliases(); } return Collections.enumeration(aliases); } @@ -114,7 +113,7 @@ public Certificate engineGetCertificate(String alias) { if (certificates.containsKey(alias)) { certificate = certificates.get(alias); } else { - certificate = keyVault.getCertificate(alias); + certificate = keyVaultClient.getCertificate(alias); if (certificate != null) { certificates.put(alias, certificate); if (!aliases.contains(alias)) { @@ -130,7 +129,7 @@ public String engineGetCertificateAlias(Certificate cert) { String alias = null; if (cert != null) { if (aliases == null) { - aliases = keyVault.getAliases(); + aliases = keyVaultClient.getAliases(); } for (String candidateAlias : aliases) { Certificate certificate = engineGetCertificate(candidateAlias); @@ -170,7 +169,7 @@ public Key engineGetKey(String alias, char[] password) { if (certificateKeys.containsKey(alias)) { key = certificateKeys.get(alias); } else { - key = keyVault.getKey(alias, password); + key = keyVaultClient.getKey(alias, password); if (key != null) { certificateKeys.put(alias, key); if (!aliases.contains(alias)) { @@ -184,7 +183,7 @@ public Key engineGetKey(String alias, char[] password) { @Override public boolean engineIsCertificateEntry(String alias) { if (aliases == null) { - aliases = keyVault.getAliases(); + aliases = keyVaultClient.getAliases(); } return aliases.contains(alias); } @@ -198,11 +197,11 @@ public boolean engineIsKeyEntry(String alias) { public void engineLoad(KeyStore.LoadStoreParameter param) { if (param instanceof KeyVaultLoadStoreParameter) { KeyVaultLoadStoreParameter parameter = (KeyVaultLoadStoreParameter) param; - keyVault = new KeyVaultClient( - parameter.getUri(), - parameter.getTenantId(), - parameter.getClientId(), - parameter.getClientSecret()); + keyVaultClient = new KeyVaultClient( + parameter.getUri(), + parameter.getTenantId(), + parameter.getClientId(), + parameter.getClientSecret()); } sideLoad(); } @@ -215,7 +214,7 @@ public void engineLoad(InputStream stream, char[] password) { @Override public void engineSetCertificateEntry(String alias, Certificate certificate) { if (aliases == null) { - aliases = keyVault.getAliases(); + aliases = keyVaultClient.getAliases(); } if (!aliases.contains(alias)) { aliases.add(alias); @@ -258,12 +257,14 @@ public void engineStore(KeyStore.LoadStoreParameter param) { */ private String[] getFilenames(String path) throws IOException { List filenames = new ArrayList<>(); - InputStream in = getClass().getResourceAsStream(path); - if (in != null) { - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - String resource; - while ((resource = br.readLine()) != null) { - filenames.add(resource); + try (InputStream in = getClass().getResourceAsStream(path)) { + if (in != null) { + try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) { + String resource; + while ((resource = br.readLine()) != null) { + filenames.add(resource); + } + } } } return filenames.toArray(new String[0]); @@ -277,16 +278,19 @@ private String[] getFilenames(String path) throws IOException { * @throws IOException when an I/O error occurs. */ private byte[] readAllBytes(InputStream inputStream) throws IOException { - ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - while (true) { - int r = inputStream.read(buffer); - if (r == -1) { - break; + byte[] bytes; + try (ByteArrayOutputStream byteOutput = new ByteArrayOutputStream()) { + byte[] buffer = new byte[1024]; + while (true) { + int r = inputStream.read(buffer); + if (r == -1) { + break; + } + byteOutput.write(buffer, 0, r); } - byteOutput.write(buffer, 0, r); + bytes = byteOutput.toByteArray(); } - return byteOutput.toByteArray(); + return bytes; } /** @@ -307,12 +311,12 @@ private void sideLoad() { try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate certificate = (X509Certificate) cf.generateCertificate( - new ByteArrayInputStream(bytes)); + new ByteArrayInputStream(bytes)); engineSetCertificateEntry(alias, certificate); LOGGER.log(INFO, "Side loaded certificate: {0} from: {1}", - new Object[] { alias, filename }); + new Object[]{alias, filename}); } catch (CertificateException e) { - LOGGER.log(WARNING, "Unable to side-load certificate", e); + LOGGER.log(WARNING, "Unable to side-load certificate from: " + filename, e); } } } diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java index b5be3dc3f3f0..69db2137ee90 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java @@ -19,7 +19,7 @@ /** * The Azure Key Vault variant of the X509TrustManager. */ -public class KeyVaultTrustManager extends X509ExtendedTrustManager implements X509TrustManager { +public class KeyVaultTrustManager extends X509ExtendedTrustManager { /** * Stores the default trust manager. diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/CertificatePolicy.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/CertificatePolicy.java index e678c296b6bb..871d73500038 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/CertificatePolicy.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/CertificatePolicy.java @@ -3,6 +3,7 @@ package com.azure.security.keyvault.jca.rest; +import com.fasterxml.jackson.annotation.JsonProperty; import java.io.Serializable; /** @@ -13,6 +14,7 @@ public class CertificatePolicy implements Serializable { /** * Stores the key properties. */ + @JsonProperty("key_props") private KeyProperties keyProperties; /** @@ -20,7 +22,7 @@ public class CertificatePolicy implements Serializable { * * @return the key properties. */ - public KeyProperties getKey_props() { + public KeyProperties getKeyProperties() { return keyProperties; } @@ -29,7 +31,7 @@ public KeyProperties getKey_props() { * * @param keyProperties the key properties. */ - public void setKey_props(KeyProperties keyProperties) { + public void setKeyProperties(KeyProperties keyProperties) { this.keyProperties = keyProperties; } } diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/OAuthToken.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/OAuthToken.java index e394baaa5591..55206bc4070a 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/OAuthToken.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/OAuthToken.java @@ -2,6 +2,7 @@ // Licensed under the MIT License. package com.azure.security.keyvault.jca.rest; +import com.fasterxml.jackson.annotation.JsonProperty; import java.io.Serializable; /** @@ -12,15 +13,16 @@ public class OAuthToken implements Serializable { /** * Stores the access token. */ - private String access_token; + @JsonProperty("access_token") + private String accessToken; /** * Get the access token. * * @return the access token. */ - public String getAccess_token() { - return access_token; + public String getAccessToken() { + return accessToken; } /** @@ -28,7 +30,7 @@ public String getAccess_token() { * * @param accessToken the access token. */ - public void setAccess_token(String accessToken) { - this.access_token = accessToken; + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; } } diff --git a/sdk/spring/azure-spring-boot-starter-keyvault-certificates/src/main/java/com/azure/spring/security/keyvault/certificates/starter/KeyVaultCertificatesEnvironmentPostProcessor.java b/sdk/spring/azure-spring-boot-starter-keyvault-certificates/src/main/java/com/azure/spring/security/keyvault/certificates/starter/KeyVaultCertificatesEnvironmentPostProcessor.java index 6d76e12b4619..b1e9a2504ac7 100644 --- a/sdk/spring/azure-spring-boot-starter-keyvault-certificates/src/main/java/com/azure/spring/security/keyvault/certificates/starter/KeyVaultCertificatesEnvironmentPostProcessor.java +++ b/sdk/spring/azure-spring-boot-starter-keyvault-certificates/src/main/java/com/azure/spring/security/keyvault/certificates/starter/KeyVaultCertificatesEnvironmentPostProcessor.java @@ -7,7 +7,6 @@ import java.security.Security; import java.util.Properties; -import java.util.logging.Logger; import javax.net.ssl.HttpsURLConnection; import org.springframework.boot.SpringApplication; @@ -22,11 +21,6 @@ @Order(LOWEST_PRECEDENCE) public class KeyVaultCertificatesEnvironmentPostProcessor implements EnvironmentPostProcessor { - /** - * Stores the logger. - */ - private static final Logger LOGGER = Logger.getLogger(KeyVaultCertificatesEnvironmentPostProcessor.class.getName()); - @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { @@ -100,9 +94,7 @@ public void postProcessEnvironment(ConfigurableEnvironment environment, enabled = environment.getProperty("azure.keyvault.jca.disableHostnameVerification"); if (Boolean.parseBoolean(enabled)) { - HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> { - return true; - }); + HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true); } } } From 97a28c05dc43ffd69eea7b8d73b3e63330d8803a Mon Sep 17 00:00:00 2001 From: Chuang <54572251+xccc-msft@users.noreply.github.com> Date: Mon, 26 Oct 2020 16:07:22 +0800 Subject: [PATCH 23/24] mgmt update SAMPLE.md (#16795) * mgmt use class itself for sample * update SAMPLE.md with links of sample repo * fix incorrect links --- .../DeployUsingARMTemplateWithTags.java | 2 +- .../DeployVirtualMachineUsingARMTemplate.java | 2 +- sdk/resourcemanager/docs/SAMPLE.md | 186 +++++++++--------- 3 files changed, 95 insertions(+), 95 deletions(-) diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployUsingARMTemplateWithTags.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployUsingARMTemplateWithTags.java index bc9e9671934f..533c501cb135 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployUsingARMTemplateWithTags.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployUsingARMTemplateWithTags.java @@ -144,7 +144,7 @@ private static String getTemplate(AzureResourceManager azureResourceManager) thr final String hostingPlanName = Utils.randomResourceName(azureResourceManager, "hpRSAT", 24); final String webappName = Utils.randomResourceName(azureResourceManager, "wnRSAT", 24); - try (InputStream embeddedTemplate = DeployUsingARMTemplateWithProgress.class.getResourceAsStream("/templateValue.json")) { + try (InputStream embeddedTemplate = DeployUsingARMTemplateWithTags.class.getResourceAsStream("/templateValue.json")) { final ObjectMapper mapper = new ObjectMapper(); final JsonNode tmp = mapper.readTree(embeddedTemplate); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployVirtualMachineUsingARMTemplate.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployVirtualMachineUsingARMTemplate.java index 15fbd29c37b1..742864ffea64 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployVirtualMachineUsingARMTemplate.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployVirtualMachineUsingARMTemplate.java @@ -126,7 +126,7 @@ private static String getTemplate(AzureResourceManager azureResourceManager) thr final String adminPassword = Utils.password(); final String osDiskName = Utils.randomResourceName(azureResourceManager, "osdisk-", 24); - try (InputStream embeddedTemplate = DeployUsingARMTemplateWithProgress.class.getResourceAsStream("/virtualMachineWithManagedDisksTemplate.json")) { + try (InputStream embeddedTemplate = DeployVirtualMachineUsingARMTemplate.class.getResourceAsStream("/virtualMachineWithManagedDisksTemplate.json")) { final ObjectMapper mapper = new ObjectMapper(); final JsonNode tmp = mapper.readTree(embeddedTemplate); diff --git a/sdk/resourcemanager/docs/SAMPLE.md b/sdk/resourcemanager/docs/SAMPLE.md index 6a803f651f7a..38aa49b76a5d 100644 --- a/sdk/resourcemanager/docs/SAMPLE.md +++ b/sdk/resourcemanager/docs/SAMPLE.md @@ -84,46 +84,46 @@ You can create a virtual machine scale set instance by using a `define() … cre Virtual Machines Virtual Machines - parallel execution Virtual Machine Scale Sets @@ -208,20 +208,20 @@ ApplicationGateway applicationGateway = azure.applicationGateways().define("myFi Networking @@ -229,22 +229,22 @@ ApplicationGateway applicationGateway = azure.applicationGateways().define("myFi DNS Application Gateway Express Route @@ -277,30 +277,30 @@ WebApp webApp = azure.webApps() Web Apps on Windows Web Apps on Linux @@ -309,11 +309,11 @@ WebApp webApp = azure.webApps() Functions @@ -378,9 +378,9 @@ SqlDatabase database = azure.sqlServers().databases().define("myNewDatabase") Storage @@ -405,11 +405,11 @@ SqlDatabase database = azure.sqlServers().databases().define("myNewDatabase") Cosmos DB @@ -426,10 +426,10 @@ SqlDatabase database = azure.sqlServers().databases().define("myNewDatabase") Active Directory @@ -438,9 +438,9 @@ SqlDatabase database = azure.sqlServers().databases().define("myNewDatabase")
  • Manage container registry
  • Manage container registry with Web hooks
  • -
  • Manage Kubernetes cluster (AKS)
  • +
  • Manage Kubernetes cluster (AKS)
  • Deploy an image from container registry to Kubernetes cluster (AKS)
  • -
  • Manage Kubernetes clusters with advanced networking
  • +
  • Manage Kubernetes clusters with advanced networking
  • Key Vault Monitor From 183793f3863d9e6b760bf351fa4b42da495f2f82 Mon Sep 17 00:00:00 2001 From: SDK Automation Date: Mon, 26 Oct 2020 08:37:01 +0000 Subject: [PATCH 24/24] Generated from 1f91f50eff5790375e54f20ff15fbb3d3640be73 --- sdk/compute/mgmt-v2018_04_01/pom.xml | 12 +++--- .../compute/v2018_04_01/CreationData.java | 20 ++++----- .../management/compute/v2018_04_01/Disk.java | 42 ++++++++++++++----- .../compute/v2018_04_01/DiskSku.java | 11 ++--- .../compute/v2018_04_01/DiskUpdate.java | 16 +++---- .../v2018_04_01/EncryptionSettings.java | 12 +++--- .../compute/v2018_04_01/GrantAccessData.java | 8 ++-- .../v2018_04_01/ImageDiskReference.java | 10 ++--- .../v2018_04_01/KeyVaultAndKeyReference.java | 8 ++-- .../KeyVaultAndSecretReference.java | 8 ++-- .../compute/v2018_04_01/Snapshot.java | 38 ++++++++++++----- .../compute/v2018_04_01/SnapshotSku.java | 6 +-- .../compute/v2018_04_01/SnapshotUpdate.java | 16 +++---- .../compute/v2018_04_01/SourceVault.java | 6 +-- .../v2018_04_01/StorageAccountTypes.java | 3 ++ .../implementation/AccessUriInner.java | 2 +- .../ComputeManagementClientImpl.java | 22 +++++----- .../v2018_04_01/implementation/DiskInner.java | 26 ++++++------ .../implementation/DisksInner.java | 6 ++- .../implementation/SnapshotInner.java | 22 +++++----- .../implementation/SnapshotsInner.java | 6 ++- 21 files changed, 175 insertions(+), 125 deletions(-) diff --git a/sdk/compute/mgmt-v2018_04_01/pom.xml b/sdk/compute/mgmt-v2018_04_01/pom.xml index 04828ca27096..aa50a52a1b51 100644 --- a/sdk/compute/mgmt-v2018_04_01/pom.xml +++ b/sdk/compute/mgmt-v2018_04_01/pom.xml @@ -11,15 +11,15 @@ com.microsoft.azure azure-arm-parent - 1.2.0 - ../../parents/azure-arm-parent + 1.1.0 + ../../../pom.management.xml azure-mgmt-compute 1.0.0-beta jar Microsoft Azure SDK for Compute Management This package contains Microsoft Compute Management SDK. - https://github.com/Azure/azure-libraries-for-java + https://github.com/Azure/azure-sdk-for-java The MIT License (MIT) @@ -28,8 +28,8 @@ - scm:git:https://github.com/Azure/azure-libraries-for-java - scm:git:git@github.com:Azure/azure-libraries-for-java.git + scm:git:https://github.com/Azure/azure-sdk-for-java + scm:git:git@github.com:Azure/azure-sdk-for-java.git HEAD @@ -71,6 +71,8 @@ azure-arm-client-runtime test-jar test + + 1.6.5 diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/CreationData.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/CreationData.java index a87d4de13915..fc7b1af28ba8 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/CreationData.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/CreationData.java @@ -51,7 +51,7 @@ public class CreationData { private String sourceResourceId; /** - * Get the createOption value. + * Get this enumerates the possible sources of a disk's creation. Possible values include: 'Empty', 'Attach', 'FromImage', 'Import', 'Copy', 'Restore'. * * @return the createOption value */ @@ -60,7 +60,7 @@ public DiskCreateOption createOption() { } /** - * Set the createOption value. + * Set this enumerates the possible sources of a disk's creation. Possible values include: 'Empty', 'Attach', 'FromImage', 'Import', 'Copy', 'Restore'. * * @param createOption the createOption value to set * @return the CreationData object itself. @@ -71,7 +71,7 @@ public CreationData withCreateOption(DiskCreateOption createOption) { } /** - * Get the storageAccountId value. + * Get if createOption is Import, the Azure Resource Manager identifier of the storage account containing the blob to import as a disk. Required only if the blob is in a different subscription. * * @return the storageAccountId value */ @@ -80,7 +80,7 @@ public String storageAccountId() { } /** - * Set the storageAccountId value. + * Set if createOption is Import, the Azure Resource Manager identifier of the storage account containing the blob to import as a disk. Required only if the blob is in a different subscription. * * @param storageAccountId the storageAccountId value to set * @return the CreationData object itself. @@ -91,7 +91,7 @@ public CreationData withStorageAccountId(String storageAccountId) { } /** - * Get the imageReference value. + * Get disk source information. * * @return the imageReference value */ @@ -100,7 +100,7 @@ public ImageDiskReference imageReference() { } /** - * Set the imageReference value. + * Set disk source information. * * @param imageReference the imageReference value to set * @return the CreationData object itself. @@ -111,7 +111,7 @@ public CreationData withImageReference(ImageDiskReference imageReference) { } /** - * Get the sourceUri value. + * Get if createOption is Import, this is the URI of a blob to be imported into a managed disk. * * @return the sourceUri value */ @@ -120,7 +120,7 @@ public String sourceUri() { } /** - * Set the sourceUri value. + * Set if createOption is Import, this is the URI of a blob to be imported into a managed disk. * * @param sourceUri the sourceUri value to set * @return the CreationData object itself. @@ -131,7 +131,7 @@ public CreationData withSourceUri(String sourceUri) { } /** - * Get the sourceResourceId value. + * Get if createOption is Copy, this is the ARM id of the source snapshot or disk. * * @return the sourceResourceId value */ @@ -140,7 +140,7 @@ public String sourceResourceId() { } /** - * Set the sourceResourceId value. + * Set if createOption is Copy, this is the ARM id of the source snapshot or disk. * * @param sourceResourceId the sourceResourceId value to set * @return the CreationData object itself. diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/Disk.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/Disk.java index 7c48e8958d0f..61e0c60b2797 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/Disk.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/Disk.java @@ -10,12 +10,12 @@ import com.microsoft.azure.arm.model.HasInner; import com.microsoft.azure.arm.resources.models.Resource; +import com.microsoft.azure.arm.resources.models.GroupableResourceCore; import com.microsoft.azure.arm.resources.models.HasResourceGroup; import com.microsoft.azure.arm.model.Refreshable; import com.microsoft.azure.arm.model.Updatable; import com.microsoft.azure.arm.model.Appliable; import com.microsoft.azure.arm.model.Creatable; -import com.microsoft.azure.arm.resources.models.GroupableResourceCore; import com.microsoft.azure.arm.resources.models.HasManager; import com.microsoft.azure.management.compute.v2018_04_01.implementation.ComputeManager; import java.util.List; @@ -99,56 +99,68 @@ interface WithGroup extends GroupableResourceCore.DefinitionStages.WithGroup zones); } @@ -172,41 +184,49 @@ interface Update extends Appliable, Resource.UpdateWithTags, Updat */ interface UpdateStages { /** - * The stage of the disk {0} allowing to specify DiskSizeGB. + * The stage of the disk update allowing to specify DiskSizeGB. */ interface WithDiskSizeGB { /** * Specifies diskSizeGB. + * @param diskSizeGB If creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size + * @return the next update stage */ Update withDiskSizeGB(Integer diskSizeGB); } /** - * The stage of the disk {0} allowing to specify EncryptionSettings. + * The stage of the disk update allowing to specify EncryptionSettings. */ interface WithEncryptionSettings { /** * Specifies encryptionSettings. + * @param encryptionSettings Encryption settings for disk or snapshot + * @return the next update stage */ Update withEncryptionSettings(EncryptionSettings encryptionSettings); } /** - * The stage of the disk {0} allowing to specify OsType. + * The stage of the disk update allowing to specify OsType. */ interface WithOsType { /** * Specifies osType. + * @param osType the Operating System type. Possible values include: 'Windows', 'Linux' + * @return the next update stage */ Update withOsType(OperatingSystemTypes osType); } /** - * The stage of the disk {0} allowing to specify Sku. + * The stage of the disk update allowing to specify Sku. */ interface WithSku { /** * Specifies sku. + * @param sku the sku parameter value + * @return the next update stage */ Update withSku(DiskSku sku); } diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/DiskSku.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/DiskSku.java index 097f3fb3ec28..67754d466609 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/DiskSku.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/DiskSku.java @@ -11,11 +11,12 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * The disks sku name. Can be Standard_LRS or Premium_LRS. + * The disks sku name. Can be Standard_LRS, Premium_LRS, or StandardSSD_LRS. */ public class DiskSku { /** - * The sku name. Possible values include: 'Standard_LRS', 'Premium_LRS'. + * The sku name. Possible values include: 'Standard_LRS', 'Premium_LRS', + * 'StandardSSD_LRS'. */ @JsonProperty(value = "name") private StorageAccountTypes name; @@ -27,7 +28,7 @@ public class DiskSku { private String tier; /** - * Get the name value. + * Get the sku name. Possible values include: 'Standard_LRS', 'Premium_LRS', 'StandardSSD_LRS'. * * @return the name value */ @@ -36,7 +37,7 @@ public StorageAccountTypes name() { } /** - * Set the name value. + * Set the sku name. Possible values include: 'Standard_LRS', 'Premium_LRS', 'StandardSSD_LRS'. * * @param name the name value to set * @return the DiskSku object itself. @@ -47,7 +48,7 @@ public DiskSku withName(StorageAccountTypes name) { } /** - * Get the tier value. + * Get the sku tier. * * @return the tier value */ diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/DiskUpdate.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/DiskUpdate.java index f5602037c9d5..feb7386edaa1 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/DiskUpdate.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/DiskUpdate.java @@ -52,7 +52,7 @@ public class DiskUpdate { private DiskSku sku; /** - * Get the osType value. + * Get the Operating System type. Possible values include: 'Windows', 'Linux'. * * @return the osType value */ @@ -61,7 +61,7 @@ public OperatingSystemTypes osType() { } /** - * Set the osType value. + * Set the Operating System type. Possible values include: 'Windows', 'Linux'. * * @param osType the osType value to set * @return the DiskUpdate object itself. @@ -72,7 +72,7 @@ public DiskUpdate withOsType(OperatingSystemTypes osType) { } /** - * Get the diskSizeGB value. + * Get if creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. * * @return the diskSizeGB value */ @@ -81,7 +81,7 @@ public Integer diskSizeGB() { } /** - * Set the diskSizeGB value. + * Set if creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. * * @param diskSizeGB the diskSizeGB value to set * @return the DiskUpdate object itself. @@ -92,7 +92,7 @@ public DiskUpdate withDiskSizeGB(Integer diskSizeGB) { } /** - * Get the encryptionSettings value. + * Get encryption settings for disk or snapshot. * * @return the encryptionSettings value */ @@ -101,7 +101,7 @@ public EncryptionSettings encryptionSettings() { } /** - * Set the encryptionSettings value. + * Set encryption settings for disk or snapshot. * * @param encryptionSettings the encryptionSettings value to set * @return the DiskUpdate object itself. @@ -112,7 +112,7 @@ public DiskUpdate withEncryptionSettings(EncryptionSettings encryptionSettings) } /** - * Get the tags value. + * Get resource tags. * * @return the tags value */ @@ -121,7 +121,7 @@ public Map tags() { } /** - * Set the tags value. + * Set resource tags. * * @param tags the tags value to set * @return the DiskUpdate object itself. diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/EncryptionSettings.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/EncryptionSettings.java index a5241ab8fc1c..fc35f8a0efdb 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/EncryptionSettings.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/EncryptionSettings.java @@ -37,7 +37,7 @@ public class EncryptionSettings { private KeyVaultAndKeyReference keyEncryptionKey; /** - * Get the enabled value. + * Get set this flag to true and provide DiskEncryptionKey and optional KeyEncryptionKey to enable encryption. Set this flag to false and remove DiskEncryptionKey and KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the request object, the existing settings remain unchanged. * * @return the enabled value */ @@ -46,7 +46,7 @@ public Boolean enabled() { } /** - * Set the enabled value. + * Set set this flag to true and provide DiskEncryptionKey and optional KeyEncryptionKey to enable encryption. Set this flag to false and remove DiskEncryptionKey and KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the request object, the existing settings remain unchanged. * * @param enabled the enabled value to set * @return the EncryptionSettings object itself. @@ -57,7 +57,7 @@ public EncryptionSettings withEnabled(Boolean enabled) { } /** - * Get the diskEncryptionKey value. + * Get key Vault Secret Url and vault id of the disk encryption key. * * @return the diskEncryptionKey value */ @@ -66,7 +66,7 @@ public KeyVaultAndSecretReference diskEncryptionKey() { } /** - * Set the diskEncryptionKey value. + * Set key Vault Secret Url and vault id of the disk encryption key. * * @param diskEncryptionKey the diskEncryptionKey value to set * @return the EncryptionSettings object itself. @@ -77,7 +77,7 @@ public EncryptionSettings withDiskEncryptionKey(KeyVaultAndSecretReference diskE } /** - * Get the keyEncryptionKey value. + * Get key Vault Key Url and vault id of the key encryption key. * * @return the keyEncryptionKey value */ @@ -86,7 +86,7 @@ public KeyVaultAndKeyReference keyEncryptionKey() { } /** - * Set the keyEncryptionKey value. + * Set key Vault Key Url and vault id of the key encryption key. * * @param keyEncryptionKey the keyEncryptionKey value to set * @return the EncryptionSettings object itself. diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/GrantAccessData.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/GrantAccessData.java index 2acd3f446e0b..9900d5d6e582 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/GrantAccessData.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/GrantAccessData.java @@ -27,7 +27,7 @@ public class GrantAccessData { private int durationInSeconds; /** - * Get the access value. + * Get possible values include: 'None', 'Read'. * * @return the access value */ @@ -36,7 +36,7 @@ public AccessLevel access() { } /** - * Set the access value. + * Set possible values include: 'None', 'Read'. * * @param access the access value to set * @return the GrantAccessData object itself. @@ -47,7 +47,7 @@ public GrantAccessData withAccess(AccessLevel access) { } /** - * Get the durationInSeconds value. + * Get time duration in seconds until the SAS access expires. * * @return the durationInSeconds value */ @@ -56,7 +56,7 @@ public int durationInSeconds() { } /** - * Set the durationInSeconds value. + * Set time duration in seconds until the SAS access expires. * * @param durationInSeconds the durationInSeconds value to set * @return the GrantAccessData object itself. diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/ImageDiskReference.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/ImageDiskReference.java index cc8e4681e2e8..8bf454e778a6 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/ImageDiskReference.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/ImageDiskReference.java @@ -15,7 +15,7 @@ */ public class ImageDiskReference { /** - * A relative uri containing either a Platform Imgage Repository or user + * A relative uri containing either a Platform Image Repository or user * image reference. */ @JsonProperty(value = "id", required = true) @@ -30,7 +30,7 @@ public class ImageDiskReference { private Integer lun; /** - * Get the id value. + * Get a relative uri containing either a Platform Image Repository or user image reference. * * @return the id value */ @@ -39,7 +39,7 @@ public String id() { } /** - * Set the id value. + * Set a relative uri containing either a Platform Image Repository or user image reference. * * @param id the id value to set * @return the ImageDiskReference object itself. @@ -50,7 +50,7 @@ public ImageDiskReference withId(String id) { } /** - * Get the lun value. + * Get if the disk is created from an image's data disk, this is an index that indicates which of the data disks in the image to use. For OS disks, this field is null. * * @return the lun value */ @@ -59,7 +59,7 @@ public Integer lun() { } /** - * Set the lun value. + * Set if the disk is created from an image's data disk, this is an index that indicates which of the data disks in the image to use. For OS disks, this field is null. * * @param lun the lun value to set * @return the ImageDiskReference object itself. diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/KeyVaultAndKeyReference.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/KeyVaultAndKeyReference.java index 90267cab5b20..1c6f73aa511c 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/KeyVaultAndKeyReference.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/KeyVaultAndKeyReference.java @@ -28,7 +28,7 @@ public class KeyVaultAndKeyReference { private String keyUrl; /** - * Get the sourceVault value. + * Get resource id of the KeyVault containing the key or secret. * * @return the sourceVault value */ @@ -37,7 +37,7 @@ public SourceVault sourceVault() { } /** - * Set the sourceVault value. + * Set resource id of the KeyVault containing the key or secret. * * @param sourceVault the sourceVault value to set * @return the KeyVaultAndKeyReference object itself. @@ -48,7 +48,7 @@ public KeyVaultAndKeyReference withSourceVault(SourceVault sourceVault) { } /** - * Get the keyUrl value. + * Get url pointing to a key or secret in KeyVault. * * @return the keyUrl value */ @@ -57,7 +57,7 @@ public String keyUrl() { } /** - * Set the keyUrl value. + * Set url pointing to a key or secret in KeyVault. * * @param keyUrl the keyUrl value to set * @return the KeyVaultAndKeyReference object itself. diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/KeyVaultAndSecretReference.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/KeyVaultAndSecretReference.java index 6c10230ace1e..7401445d48ae 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/KeyVaultAndSecretReference.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/KeyVaultAndSecretReference.java @@ -27,7 +27,7 @@ public class KeyVaultAndSecretReference { private String secretUrl; /** - * Get the sourceVault value. + * Get resource id of the KeyVault containing the key or secret. * * @return the sourceVault value */ @@ -36,7 +36,7 @@ public SourceVault sourceVault() { } /** - * Set the sourceVault value. + * Set resource id of the KeyVault containing the key or secret. * * @param sourceVault the sourceVault value to set * @return the KeyVaultAndSecretReference object itself. @@ -47,7 +47,7 @@ public KeyVaultAndSecretReference withSourceVault(SourceVault sourceVault) { } /** - * Get the secretUrl value. + * Get url pointing to a key or secret in KeyVault. * * @return the secretUrl value */ @@ -56,7 +56,7 @@ public String secretUrl() { } /** - * Set the secretUrl value. + * Set url pointing to a key or secret in KeyVault. * * @param secretUrl the secretUrl value to set * @return the KeyVaultAndSecretReference object itself. diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/Snapshot.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/Snapshot.java index 92adc4673818..545fed5986ea 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/Snapshot.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/Snapshot.java @@ -10,12 +10,12 @@ import com.microsoft.azure.arm.model.HasInner; import com.microsoft.azure.arm.resources.models.Resource; +import com.microsoft.azure.arm.resources.models.GroupableResourceCore; import com.microsoft.azure.arm.resources.models.HasResourceGroup; import com.microsoft.azure.arm.model.Refreshable; import com.microsoft.azure.arm.model.Updatable; import com.microsoft.azure.arm.model.Appliable; import com.microsoft.azure.arm.model.Creatable; -import com.microsoft.azure.arm.resources.models.GroupableResourceCore; import com.microsoft.azure.arm.resources.models.HasManager; import com.microsoft.azure.management.compute.v2018_04_01.implementation.ComputeManager; import org.joda.time.DateTime; @@ -93,46 +93,56 @@ interface WithGroup extends GroupableResourceCore.DefinitionStages.WithGroup, Resource.UpdateWithTags, U */ interface UpdateStages { /** - * The stage of the snapshot {0} allowing to specify DiskSizeGB. + * The stage of the snapshot update allowing to specify DiskSizeGB. */ interface WithDiskSizeGB { /** * Specifies diskSizeGB. + * @param diskSizeGB If creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size + * @return the next update stage */ Update withDiskSizeGB(Integer diskSizeGB); } /** - * The stage of the snapshot {0} allowing to specify EncryptionSettings. + * The stage of the snapshot update allowing to specify EncryptionSettings. */ interface WithEncryptionSettings { /** * Specifies encryptionSettings. + * @param encryptionSettings Encryption settings for disk or snapshot + * @return the next update stage */ Update withEncryptionSettings(EncryptionSettings encryptionSettings); } /** - * The stage of the snapshot {0} allowing to specify OsType. + * The stage of the snapshot update allowing to specify OsType. */ interface WithOsType { /** * Specifies osType. + * @param osType the Operating System type. Possible values include: 'Windows', 'Linux' + * @return the next update stage */ Update withOsType(OperatingSystemTypes osType); } /** - * The stage of the snapshot {0} allowing to specify Sku. + * The stage of the snapshot update allowing to specify Sku. */ interface WithSku { /** * Specifies sku. + * @param sku the sku parameter value + * @return the next update stage */ Update withSku(SnapshotSku sku); } diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SnapshotSku.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SnapshotSku.java index bc818ea5a01d..22d99739aba3 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SnapshotSku.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SnapshotSku.java @@ -28,7 +28,7 @@ public class SnapshotSku { private String tier; /** - * Get the name value. + * Get the sku name. Possible values include: 'Standard_LRS', 'Premium_LRS', 'Standard_ZRS'. * * @return the name value */ @@ -37,7 +37,7 @@ public SnapshotStorageAccountTypes name() { } /** - * Set the name value. + * Set the sku name. Possible values include: 'Standard_LRS', 'Premium_LRS', 'Standard_ZRS'. * * @param name the name value to set * @return the SnapshotSku object itself. @@ -48,7 +48,7 @@ public SnapshotSku withName(SnapshotStorageAccountTypes name) { } /** - * Get the tier value. + * Get the sku tier. * * @return the tier value */ diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SnapshotUpdate.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SnapshotUpdate.java index 12720526308c..49b4e929c422 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SnapshotUpdate.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SnapshotUpdate.java @@ -52,7 +52,7 @@ public class SnapshotUpdate { private SnapshotSku sku; /** - * Get the osType value. + * Get the Operating System type. Possible values include: 'Windows', 'Linux'. * * @return the osType value */ @@ -61,7 +61,7 @@ public OperatingSystemTypes osType() { } /** - * Set the osType value. + * Set the Operating System type. Possible values include: 'Windows', 'Linux'. * * @param osType the osType value to set * @return the SnapshotUpdate object itself. @@ -72,7 +72,7 @@ public SnapshotUpdate withOsType(OperatingSystemTypes osType) { } /** - * Get the diskSizeGB value. + * Get if creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. * * @return the diskSizeGB value */ @@ -81,7 +81,7 @@ public Integer diskSizeGB() { } /** - * Set the diskSizeGB value. + * Set if creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. * * @param diskSizeGB the diskSizeGB value to set * @return the SnapshotUpdate object itself. @@ -92,7 +92,7 @@ public SnapshotUpdate withDiskSizeGB(Integer diskSizeGB) { } /** - * Get the encryptionSettings value. + * Get encryption settings for disk or snapshot. * * @return the encryptionSettings value */ @@ -101,7 +101,7 @@ public EncryptionSettings encryptionSettings() { } /** - * Set the encryptionSettings value. + * Set encryption settings for disk or snapshot. * * @param encryptionSettings the encryptionSettings value to set * @return the SnapshotUpdate object itself. @@ -112,7 +112,7 @@ public SnapshotUpdate withEncryptionSettings(EncryptionSettings encryptionSettin } /** - * Get the tags value. + * Get resource tags. * * @return the tags value */ @@ -121,7 +121,7 @@ public Map tags() { } /** - * Set the tags value. + * Set resource tags. * * @param tags the tags value to set * @return the SnapshotUpdate object itself. diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SourceVault.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SourceVault.java index d75a766895de..f9b619ffa113 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SourceVault.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/SourceVault.java @@ -11,7 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * The vault id is an Azure Resource Manager Resoure id in the form + * The vault id is an Azure Resource Manager Resource id in the form * /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}. */ public class SourceVault { @@ -22,7 +22,7 @@ public class SourceVault { private String id; /** - * Get the id value. + * Get resource Id. * * @return the id value */ @@ -31,7 +31,7 @@ public String id() { } /** - * Set the id value. + * Set resource Id. * * @param id the id value to set * @return the SourceVault object itself. diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/StorageAccountTypes.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/StorageAccountTypes.java index 495a8e5b9ece..08086adbdf0f 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/StorageAccountTypes.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/StorageAccountTypes.java @@ -22,6 +22,9 @@ public final class StorageAccountTypes extends ExpandableStringEnum zones() { } /** - * Set the zones value. + * Set the Logical zone list for Disk. * * @param zones the zones value to set * @return the DiskInner object itself. @@ -132,7 +132,7 @@ public DiskInner withZones(List zones) { } /** - * Get the timeCreated value. + * Get the time when the disk was created. * * @return the timeCreated value */ @@ -141,7 +141,7 @@ public DateTime timeCreated() { } /** - * Get the osType value. + * Get the Operating System type. Possible values include: 'Windows', 'Linux'. * * @return the osType value */ @@ -150,7 +150,7 @@ public OperatingSystemTypes osType() { } /** - * Set the osType value. + * Set the Operating System type. Possible values include: 'Windows', 'Linux'. * * @param osType the osType value to set * @return the DiskInner object itself. @@ -161,7 +161,7 @@ public DiskInner withOsType(OperatingSystemTypes osType) { } /** - * Get the creationData value. + * Get disk source information. CreationData information cannot be changed after the disk has been created. * * @return the creationData value */ @@ -170,7 +170,7 @@ public CreationData creationData() { } /** - * Set the creationData value. + * Set disk source information. CreationData information cannot be changed after the disk has been created. * * @param creationData the creationData value to set * @return the DiskInner object itself. @@ -181,7 +181,7 @@ public DiskInner withCreationData(CreationData creationData) { } /** - * Get the diskSizeGB value. + * Get if creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. * * @return the diskSizeGB value */ @@ -190,7 +190,7 @@ public Integer diskSizeGB() { } /** - * Set the diskSizeGB value. + * Set if creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. * * @param diskSizeGB the diskSizeGB value to set * @return the DiskInner object itself. @@ -201,7 +201,7 @@ public DiskInner withDiskSizeGB(Integer diskSizeGB) { } /** - * Get the encryptionSettings value. + * Get encryption settings for disk or snapshot. * * @return the encryptionSettings value */ @@ -210,7 +210,7 @@ public EncryptionSettings encryptionSettings() { } /** - * Set the encryptionSettings value. + * Set encryption settings for disk or snapshot. * * @param encryptionSettings the encryptionSettings value to set * @return the DiskInner object itself. @@ -221,7 +221,7 @@ public DiskInner withEncryptionSettings(EncryptionSettings encryptionSettings) { } /** - * Get the provisioningState value. + * Get the disk provisioning state. * * @return the provisioningState value */ diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/DisksInner.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/DisksInner.java index 0bcf0a550ee6..5060f7a90944 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/DisksInner.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/DisksInner.java @@ -41,6 +41,8 @@ import retrofit2.Response; import rx.functions.Func1; import rx.Observable; +import com.microsoft.azure.LongRunningFinalState; +import com.microsoft.azure.LongRunningOperationOptions; /** * An instance of this class provides access to all the operations defined @@ -1011,7 +1013,7 @@ public Observable> grantAccessWithServiceRespons } Validator.validate(grantAccessData); Observable> observable = service.grantAccess(this.client.subscriptionId(), resourceGroupName, diskName, this.client.apiVersion(), grantAccessData, this.client.acceptLanguage(), this.client.userAgent()); - return client.getAzureClient().getPostOrDeleteResultAsync(observable, new TypeToken() { }.getType()); + return client.getAzureClient().getPostOrDeleteResultAsync(observable, new LongRunningOperationOptions().withFinalStateVia(LongRunningFinalState.LOCATION), new TypeToken() { }.getType()); } /** @@ -1174,7 +1176,7 @@ public Observable> revokeAccessWithServiceResponseAsync(St throw new IllegalArgumentException("Parameter this.client.apiVersion() is required and cannot be null."); } Observable> observable = service.revokeAccess(this.client.subscriptionId(), resourceGroupName, diskName, this.client.apiVersion(), this.client.acceptLanguage(), this.client.userAgent()); - return client.getAzureClient().getPostOrDeleteResultAsync(observable, new TypeToken() { }.getType()); + return client.getAzureClient().getPostOrDeleteResultAsync(observable, new LongRunningOperationOptions().withFinalStateVia(LongRunningFinalState.LOCATION), new TypeToken() { }.getType()); } /** diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/SnapshotInner.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/SnapshotInner.java index 572638ea16d6..f2c3f31f7b07 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/SnapshotInner.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/SnapshotInner.java @@ -76,7 +76,7 @@ public class SnapshotInner extends Resource { private String provisioningState; /** - * Get the managedBy value. + * Get unused. Always Null. * * @return the managedBy value */ @@ -105,7 +105,7 @@ public SnapshotInner withSku(SnapshotSku sku) { } /** - * Get the timeCreated value. + * Get the time when the disk was created. * * @return the timeCreated value */ @@ -114,7 +114,7 @@ public DateTime timeCreated() { } /** - * Get the osType value. + * Get the Operating System type. Possible values include: 'Windows', 'Linux'. * * @return the osType value */ @@ -123,7 +123,7 @@ public OperatingSystemTypes osType() { } /** - * Set the osType value. + * Set the Operating System type. Possible values include: 'Windows', 'Linux'. * * @param osType the osType value to set * @return the SnapshotInner object itself. @@ -134,7 +134,7 @@ public SnapshotInner withOsType(OperatingSystemTypes osType) { } /** - * Get the creationData value. + * Get disk source information. CreationData information cannot be changed after the disk has been created. * * @return the creationData value */ @@ -143,7 +143,7 @@ public CreationData creationData() { } /** - * Set the creationData value. + * Set disk source information. CreationData information cannot be changed after the disk has been created. * * @param creationData the creationData value to set * @return the SnapshotInner object itself. @@ -154,7 +154,7 @@ public SnapshotInner withCreationData(CreationData creationData) { } /** - * Get the diskSizeGB value. + * Get if creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. * * @return the diskSizeGB value */ @@ -163,7 +163,7 @@ public Integer diskSizeGB() { } /** - * Set the diskSizeGB value. + * Set if creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size. * * @param diskSizeGB the diskSizeGB value to set * @return the SnapshotInner object itself. @@ -174,7 +174,7 @@ public SnapshotInner withDiskSizeGB(Integer diskSizeGB) { } /** - * Get the encryptionSettings value. + * Get encryption settings for disk or snapshot. * * @return the encryptionSettings value */ @@ -183,7 +183,7 @@ public EncryptionSettings encryptionSettings() { } /** - * Set the encryptionSettings value. + * Set encryption settings for disk or snapshot. * * @param encryptionSettings the encryptionSettings value to set * @return the SnapshotInner object itself. @@ -194,7 +194,7 @@ public SnapshotInner withEncryptionSettings(EncryptionSettings encryptionSetting } /** - * Get the provisioningState value. + * Get the disk provisioning state. * * @return the provisioningState value */ diff --git a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/SnapshotsInner.java b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/SnapshotsInner.java index 3b792dc6a90c..2018d522be49 100644 --- a/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/SnapshotsInner.java +++ b/sdk/compute/mgmt-v2018_04_01/src/main/java/com/microsoft/azure/management/compute/v2018_04_01/implementation/SnapshotsInner.java @@ -41,6 +41,8 @@ import retrofit2.Response; import rx.functions.Func1; import rx.Observable; +import com.microsoft.azure.LongRunningFinalState; +import com.microsoft.azure.LongRunningOperationOptions; /** * An instance of this class provides access to all the operations defined @@ -1011,7 +1013,7 @@ public Observable> grantAccessWithServiceRespons } Validator.validate(grantAccessData); Observable> observable = service.grantAccess(this.client.subscriptionId(), resourceGroupName, snapshotName, this.client.apiVersion(), grantAccessData, this.client.acceptLanguage(), this.client.userAgent()); - return client.getAzureClient().getPostOrDeleteResultAsync(observable, new TypeToken() { }.getType()); + return client.getAzureClient().getPostOrDeleteResultAsync(observable, new LongRunningOperationOptions().withFinalStateVia(LongRunningFinalState.LOCATION), new TypeToken() { }.getType()); } /** @@ -1174,7 +1176,7 @@ public Observable> revokeAccessWithServiceResponseAsync(St throw new IllegalArgumentException("Parameter this.client.apiVersion() is required and cannot be null."); } Observable> observable = service.revokeAccess(this.client.subscriptionId(), resourceGroupName, snapshotName, this.client.apiVersion(), this.client.acceptLanguage(), this.client.userAgent()); - return client.getAzureClient().getPostOrDeleteResultAsync(observable, new TypeToken() { }.getType()); + return client.getAzureClient().getPostOrDeleteResultAsync(observable, new LongRunningOperationOptions().withFinalStateVia(LongRunningFinalState.LOCATION), new TypeToken() { }.getType()); } /**