The Google Suite offers a wide variety of services that you can access through their comprehensive APIs. You may find a full list of all the available Google APIs here:
This article is meant to help you get started working with the Google Gmail API using the REST action in Foxtrot. Learning how to utilize the REST action in Foxtrot can enable you to integrate with third-party services allowing you to perform very powerful and advanced actions such as image analysis, email automation, etc.
The Gmail API uses the OAuth 2.0 protocol for authenticating a Google account and authorizing access to user data. By understanding how to use OAuth 2.0 protocol for authentication and the Gmail API features, you will create the basis for using many other APIs.
To read more about the Gmail API, explore this:
Would you like to learn how to utilize the Google Cloud Vision engine to perform AI-based actions? Read the article below.
Setting up the API project
The very first step is to go to the following website, make sure that you are signed in to the correct Google account: https://console.developers.google.com/
Here, select an existing project or click to create a new project. Give the new project an appropriate name like "Foxtrot Automation". When the project is created, click “Enable APIs and services” and enable Gmail. At this step, if you would like to work with any other APIs or services, you can enable them as well.
After enabling the Gmail API, you need to create credentials. This will be what will enable you to connect to the Gmail account via the API. Go to "Credentials" and select to create new credentials by the type "OAuth client ID".
The application type should be set to "Other" and with an appropriate name like "Foxtrot".
At this step, Google will prompt to inform you that OAuth is limited to 100 sensitive scope logins until the OAuth consent screen is published. This may require a verification process that can take several days. Keep this in mind going forward.
You have now created a project, enabled Gmail API, and created credentials to utilize the service. You are now ready to start using the Gmail API.
API authentication
The Gmail API uses the OAuth 2.0 protocol for authentication, which can be quite complicated if you have no experience working with APIs. During the authentication process, please reference attached Foxtrot project available at the very end of the article. The project is meant to illustrate how to create the different components.
Retrieve authentication code
The first step in the authentication process is to request access. This is something you do manually in the browser, not via Foxtrot. Open a new browser window and copy-paste the following URL.
- Make sure to replace "{clientid}" with the long Client ID from the API credentials management page on the Google console website, should be something like "XXX.apps.googleusercontent.com"
https://accounts.google.com/o/oauth2/auth?client_id={clientid}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/gmail.readonly&response_type=code
Once you accept the access via API, you will receive a code like this.
4/9wCG1zVEjVbckjIOs4mzOJ4fFD5WS0cjIgsXKG8F-2pEZBXvWKvSw4U
That is your authentication code used to both retrieve the access token and to refresh the token.
IMPORTANT: this authentication request is specific to the API you wish to use and the scope of access you need. In this example, we are working with the Gmail API, and we use the scope "https://www.googleapis.com/auth/gmail.readonly". That means that we are asking Google for permission to access the Gmail account with read only rights. Of course, if you need something else than read only right, you will need to modify this part of the request. You may see all the different options in below link.
IMPORTANT: there is a time out on this code. If the following process will not work, that is most likely because the code has expired and you will need to redo this process to retrieve a new authentication code.
Work with the access token
It is now time to open Foxtrot and prepare the setup. Create a new project in Foxtrot (or open the script available in the bottom of the article) and start by creating variables to store the following values. If you download the script available in the bottom of the article, run the actions 1-30 in order to create the variables, fill in the values, and create the credential.
- AuthCode
- ClientID
- ClientSecret
- AccessToken
- RefreshToken
- Output
- Status
Start by adding the values to the variables.
- AuthCode = the code above retrieved from the website
- ClientID = the Client ID from the Google console website also used in the previous request
- ClientSecret = click on the credentials to open it in order to see the Client secret
It should look similar to this.
Also, make sure to create a Create Credential action before proceeding. This is the Create Credential action at step number 27 in the script available in the bottom of the article. This will be used for any future API call authenticating them using the Bearer Token method. Create a new credential and leave the password blank and select the option to never save projected values with the project.
Now, go under Advanced in the action list to make a new REST action. This is the REST action at step number 32 in the script available in the bottom of the article. Set up the action as shown in the screenshot below. The first string is the following.
https://accounts.google.com/o/oauth2/token?code=[%AuthCode]&client_id=[%ClientID]&client_secret=[%ClientSecret]&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code
Run the action. You know that it worked if you receive a status 200.
If it did not work, you were most likely too slow and the authentication code from the website has expired. Redo the process to retrieve a new authentication code, make sure to update the AuthCode variable in Foxtrot with the new code and try to rerun the REST action. At this point, it should work unless something is setup incorrectly.
The output of the REST call is something like this.
{
"access_token": "ya29.Glu2BvU_3-UN4Fk59owuINjJuveWXIMQNsn8NQRNJT_ZxzUNHcyLbgWmus_YTufwS60_atzOB4MCFywYhbMe0dXMwYla-Kzfc5wSnzJ-DrGmiNBMXlfedCe_EK8y",
"expires_in": 3600,
"refresh_token": "1/-nXR9_919B7HrSoJKL_sxiBdIq7nliUV_bmLXSrzqAQ",
"scope": "https://www.googleapis.com/auth/gmail.readonly",
"token_type": "Bearer"
}
Update your two variables with the values from the output.
- AccessToken = access_token
- RefreshToken = refresh_token
It should look something like this.
Now, add a new Set Credential action where you set the password of the credential to be the value of the AccessToken variable. So, you literally write "[%AccessToken]" in the value field. This will dynamically set the credential to have the latest access token retrieved from the REST call, making sure that you are always authenticated to perform any future REST calls.
As also shown in the output, the access token will expire. There is a method to refresh to receive a new token without the need to restart the full process all the way back to the manual step in the browser. Go under Advanced in the action list to make a new REST action. This is the REST action at step number 41 in the script available in the bottom of the article. Set up the action as shown in the screenshot below. The first string is the following.
https://accounts.google.com/o/oauth2/token?client_id=[%ClientID]&client_secret=[%ClientSecret]&refresh_token=[%RefreshToken]&grant_type=refresh_token
The output of the REST call is something like this.
{
"access_token": "ya29.Glu2BiL7RpEC8fRpT88-lGnwabUCGREV3fEmOgw8ZYy8PfFj7TOnUl-8O7SQPj7NN-_BEJCb7kmE3IRai-jsjmI_F6tz3dzhgQW32t221Vue7Bfc50sQs21_lcm_",
"expires_in": 3600,
"scope": "https://www.googleapis.com/auth/gmail.readonly",
"token_type": "Bearer"
}
Now, make sure to update your AcessToken variable with a Set Variable action and use the Set Credential action to update the Gmail API credential as shown previously.
This is the core principle of authenticating your API calls. The access token will be what you will use next to authenticate any API calls to the Gmail API.
Read Gmail
Based on all above learnings and values retrieved, it is now time to perform the first call to the Gmail API. All available Gmail API calls can be explored here.
To get started, let's perform a very simple call to get the list of all emails in the inbox. That will be this call.
Before proceeding, make sure that you have a valid access token. In Foxtrot, run the call to refresh the access token and then make sure to update your AccessToken variable and the credential.
Start by creating a new variable called Email and set the value of the variable to be the email address of the account. Now, go under Advanced in the action list to make a new REST action. This is the REST action at step number 50 in the script available in the bottom of the article. Set up the action as shown in the screenshot below. The first string is the following.
https://www.googleapis.com/gmail/v1/users/[%Email]/messages
The output of the REST call is something like this.
{
"messages": [
{
"id": "1690a393794e721a",
"threadId": "1690a393794e721a"
},
{
"id": "1690011cf4622303",
"threadId": "1690011cf4622303"
}
],
"resultSizeEstimate": 2
}
You can now decide to loop through all the emails or access one of them specifically. To read one of the emails, start by creating a new variable called EmailID and set the value of the variable to be one of the email IDs from the output. Now, go under Advanced in the action list to make a new REST action. This is the REST action at step number 50 in the script available in the bottom of the article. Set up the action as shown in the screenshot below. The first string is the following.
https://www.googleapis.com/gmail/v1/users/[%Email]/messages/[%EmailID]
The output of the REST call is something like this.
{
"id": "1690011cf4622303",
"threadId": "1690011cf4622303",
"labelIds": [
"CATEGORY_PERSONAL",
"INBOX"
],
"snippet": "Netflix Din prøveperiode er næsten slut Hej Mathias Vi håber, du er lige så glad for Netflix, som vi er for at have dig som medlem. Bliv hos os, og få glæde af endnu flere fantastiske serier og film.",
"historyId": "10954",
"internalDate": "1550484359000",
"payload": {
"partId": "",
"mimeType": "multipart/alternative",
"filename": "",
"headers": [
{
"name": "Delivered-To",
"value": "mbalslow@gmail.com"
},
{
"name": "Received",
"value": "by 2002:a1c:f603:0:0:0:0:0 with SMTP id w3csp2397864wmc; Mon, 18 Feb 2019 02:06:01 -0800 (PST)"
},
{
"name": "X-Google-Smtp-Source",
"value": "AHgI3IZBON6z6MiB2dZSjLYgUeMHTL1ucNlcexO9nlY9lj64fkXcKuB2f1gRSOJNeaARRU0fyGak"
},
{
"name": "X-Received",
"value": "by 2002:a37:a316:: with SMTP id m22mr15546736qke.194.1550484361012; Mon, 18 Feb 2019 02:06:01 -0800 (PST)"
},
{
"name": "ARC-Seal",
"value": "i=1; a=rsa-sha256; t=1550484361; cv=none; d=google.com; s=arc-20160816; b=qdIKnAjMRqSH6a0ek7ya9grrxpDIWz2MtLPZLvSV8/UibGC02OtvgF/UQSoA0SOPBp fciIczoUSSQJVKScN2DupIp771/DxEGsZcDTeIIGJTic6bdvNRl5JK1MBcxAPAsoTqgb pYu5uqw0CF2V8xYrJJ8iLnfhRYla7n/Kd59FXcUD8RQdGPIKk1gBbIYQJprRaK28ce3M g9xUrbm6usgsb3iZY8Ktoc8rAJUomsR4Aq3FTXjZwiT1T96yY/udnzpU/4VFZLER5hhE VScr7jCXJwtseGgespAygjfDPK28HMz931dxlkUbH+MgdIS9LaqVEbYIe+hwWg6ybeI7 NcgA=="
},
{
"name": "ARC-Message-Signature",
"value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=feedback-id:list-unsubscribe:precedence:mime-version:subject :message-id:to:sender:from:date:dkim-signature:dkim-signature; bh=ydjOsag1PEiKNCeibwPNhAr6Sjp59D75cwKvEc6VKNM=; b=0RwAoqqJzrOprBTwIz8cC5F0N8lL21meFxYEYLRtoFwfmCKDZ1MOz8WisPJDXgv+Pk +gp3OzyaqdrpZFCq9RiYt7okIDkiXMq3EnOgmnpt1PZ2NwqJkyA7LHSo7TXZkFFJWxbY aTRu10dxILtW/CWBL4kfTsGrKF0TFvBAB1PSSMhoctuB+NACGtAir/UAQGA9CG9Shq84 QwCUk2za4l1GDINIu3jWnGc7xh7+RyRKBssC+kKcCtcZqeTm25q2SiV4uNHgo1iOaVOk 2n+PEMjM3JTT2/RIT8YOusGM2F2/G10b7vW7zmf+LQoRJ7OSPEqRmGmRNrgwP3AhPkkM HcUA=="
},
{
"name": "ARC-Authentication-Results",
"value": "i=1; mx.google.com; dkim=pass header.i=@netflix.com header.s=emotixlbezkp6gpvmko5lunmgwd5syff header.b=OABaYFcH; dkim=pass header.i=@amazonses.com header.s=ug7nbtf4gccmlpwj322ax3p6ow6yfsug header.b=Sl9316TN; spf=pass (google.com: domain of 010001690011cb15-2ef7d307-17e8-4161-9e0b-e4514c2c3da3-000000@mailer.netflix.com designates 54.240.41.29 as permitted sender) smtp.mailfrom=010001690011cb15-2ef7d307-17e8-4161-9e0b-e4514c2c3da3-000000@mailer.netflix.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=netflix.com"
},
{
"name": "Return-Path",
"value": "\u003c010001690011cb15-2ef7d307-17e8-4161-9e0b-e4514c2c3da3-000000@mailer.netflix.com\u003e"
},
{
"name": "Received",
"value": "from a41-29.smtp-out.amazonses.com (a41-29.smtp-out.amazonses.com. [54.240.41.29]) by mx.google.com with ESMTPS id c8si1015806qkl.191.2019.02.18.02.06.00 for \u003cmbalslow@gmail.com\u003e (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 18 Feb 2019 02:06:01 -0800 (PST)"
},
{
"name": "Received-SPF",
"value": "pass (google.com: domain of 010001690011cb15-2ef7d307-17e8-4161-9e0b-e4514c2c3da3-000000@mailer.netflix.com designates 54.240.41.29 as permitted sender) client-ip=54.240.41.29;"
},
{
"name": "Authentication-Results",
"value": "mx.google.com; dkim=pass header.i=@netflix.com header.s=emotixlbezkp6gpvmko5lunmgwd5syff header.b=OABaYFcH; dkim=pass header.i=@amazonses.com header.s=ug7nbtf4gccmlpwj322ax3p6ow6yfsug header.b=Sl9316TN; spf=pass (google.com: domain of 010001690011cb15-2ef7d307-17e8-4161-9e0b-e4514c2c3da3-000000@mailer.netflix.com designates 54.240.41.29 as permitted sender) smtp.mailfrom=010001690011cb15-2ef7d307-17e8-4161-9e0b-e4514c2c3da3-000000@mailer.netflix.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=netflix.com"
},
{
"name": "DKIM-Signature",
"value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=emotixlbezkp6gpvmko5lunmgwd5syff; d=netflix.com; t=1550484360; i=@mailer.netflix.com; h=Date:From:Sender:To:Message-ID:Subject:MIME-Version:Content-Type:List-Unsubscribe; bh=Seys9KPYh8746hJT9gVHI+flk0v2Cn8f1QSybjnr18k=; b=OABaYFcH0mmtor1Mq2H/MagfW2rVcAzUC4hjMsXjrK6NDY7KtFPr2151JtdRllRF 6hJfjTcwHdAR6+tgK5ovr8G7kQ3BXE6Q8pXsNiUV0+fnTPA0FkwbweqzwLRImggBVCD iJ6fRdEIwWezj92pcOwBq/viDscUy5SjycGtbr+A="
},
{
"name": "DKIM-Signature",
"value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=ug7nbtf4gccmlpwj322ax3p6ow6yfsug; d=amazonses.com; t=1550484360; h=Date:From:Sender:To:Message-ID:Subject:MIME-Version:Content-Type:List-Unsubscribe:Feedback-ID; bh=Seys9KPYh8746hJT9gVHI+flk0v2Cn8f1QSybjnr18k=; b=Sl9316TNENjENLef42SxzhsVzLthNQzsrOcxbernQloedOYZYbwIqzjQutV+CqgT nf3Z0vEIB8Pu72xYbTvKs4Yklt132mJO/LtzV1b0isYI3d2ZRUDv36/MGiqjjQnd2dR LCF1nP73LNtaKnKBDaEjaZljJmuzfjnGqJW4NU8w="
},
{
"name": "Date",
"value": "Mon, 18 Feb 2019 10:05:59 +0000"
},
{
"name": "From",
"value": "Netflix \u003cinfo@mailer.netflix.com\u003e"
},
{
"name": "Sender",
"value": "Netflix \u003cinfo@mailer.netflix.com\u003e"
},
{
"name": "To",
"value": "mbalslow@gmail.com"
},
{
"name": "Message-ID",
"value": "\u003c010001690011cb15-2ef7d307-17e8-4161-9e0b-e4514c2c3da3-000000@email.amazonses.com\u003e"
},
{
"name": "Subject",
"value": "Påmindelse: Din gratis måned udløber torsdag den 21. februar 2019."
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "Content-Type",
"value": "multipart/alternative; boundary=\"----=_Part_7136998_1732212059.1550484359946\""
},
{
"name": "X-To",
"value": "mbalslow@gmail.com"
},
{
"name": "Precedence",
"value": "bulk"
},
{
"name": "X-AppInfo",
"value": "Netflix Mercury S s.33a930e.3160"
},
{
"name": "X-ProcEnc",
"value": "BQAtAAEBEPB/fSoiF4iYhE0LUfxCWlkgpzL7AOHtSBjUnTu3n5oQTv6JeKcpz50Y7jT3JT/BXek="
},
{
"name": "X-MailingID",
"value": "mercury::LOW_RISK::12490::363BF809E83BD9F782607F7550711AA9AC110011::A293A06504BFE429BC019D9F1D0AD4DF64555AC7::\u003c1690011CB0A@netflix.com\u003e"
},
{
"name": "X-GroupId",
"value": "4"
},
{
"name": "X-localeCountry",
"value": "da::DK"
},
{
"name": "X-ProcInfo",
"value": "mercurymailman::mercurymailman::mercuryecsqs::mercuryecsqs-figment-i-076a694b681f0c692::mercurymp-daily-i-0fd6f7fe631e6d4d0::00:00:03:10.206"
},
{
"name": "X-EvCacheKey",
"value": "12490.EMAIL.FREE_TRIAL_REMINDER.-0005.-5.da.DK"
},
{
"name": "X-Version",
"value": "7935"
},
{
"name": "List-Unsubscribe",
"value": "\u003cmailto:U01CMjZON0ZQSkg0VEFLV1U3WEZMWVhYM0kxN0U2@unsubscribe.netflix.com\u003e, \u003chttps://www.netflix.com/EmailUnsubscribe?id=BQE0AAEBEBeMilkgZeCj1ZN%2BpogsxrqAkCsXrcfd2Ga%2BRJVyCU2D4X5HmTBl7hDo3QNLyo8%2FH6gMVRjNXrrvwJs4Un2Y7kDRgu0%2FdtOEaUDkdhhJe8LY0dBY%2Fvvx%2FhO0DB%2BmkAaNjWeEKjpfL2UcdtnYbgalTaw1JouUObZBR0l0keXTw1yVEJ20KIkPHizMhaI7QwF8opj%2FeheAiB9EYFIlcRlXlfGn1Q%3D%3D&lnktrk=EMP&g=A293A06504BFE429BC019D9F1D0AD4DF64555AC7&lkid=unsubscribe_link\u003e"
},
{
"name": "X-SES-Outgoing",
"value": "2019.02.18-54.240.41.29"
},
{
"name": "Feedback-ID",
"value": "1.us-east-1.TW2kQXBPKzEfHzcyZOUFPUd4i/tuZQjQCCDIsBA/Brk=:AmazonSES"
}
],
"body": {
"size": 0
},
"parts": [
{
"partId": "0",
"mimeType": "text/plain",
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "text/plain; charset=utf-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "quoted-printable"
}
],
"body": {
"size": 2288,
"data": "DQogIEhlaiBNYXRoaWFzIFZpIGjDpWJlciwgZHUgZXIgbGlnZSBzw6UgZ2xhZCBmb3IgTmV0ZmxpeCwgc29tIHZpIGVyIGZvciBhdCBoYXZlIGRpZyBzb20gbWVkbGVtLiBCbGl2IGhvcyBvcywgb2cgZsOlIGdsw6ZkZSBhZiBlbmRudSBmbGVyZSBmYW50YXN0aXNrZSBzZXJpZXIgb2cgZmlsbS4gSHZpcyBkdSBpa2tlIGFmbWVsZGVyIGRpdCBtZWRsZW1za2FiLCB2aWwgZGV0IGF1dG9tYXRpc2sgZm9ydHPDpnR0ZSwgb2cgZGVyIHZpbCBibGl2ZSB0cnVra2V0IGJldGFsaW5nIHRvcnNkYWcgZGVuIDIxLiBmZWJydWFyIDIwMTksIG7DpXIgZGluIGdyYXRpcyBwcsO4dmVwZXJpb2RlIHVkbMO4YmVyLiBUYWssIGZvcmRpIGR1IGJsaXZlciBob3Mgb3MuIChodHRwczovL3d3dy5uZXRmbGl4LmNvbS9icm93c2U_bG5rdHJrPUVNUCZnPUEyOTNBMDY1MDRCRkU0MjlCQzAxOUQ5RjFEMEFENERGNjQ1NTVBQzcmbGtpZD1VUkxfSE9NRSkNCg0KVmkgZXIgaGVyIGZvciBhdCBoasOmbHBlLCBodmlzIGR1IGhhciBicnVnIGZvciBkZXQuIEfDpSB0aWwgdm9yZXMgSGrDpmxwLWNlbnRlciAoIGh0dHBzOi8vaGVscC5uZXRmbGl4LmNvbS9oZWxwP2xua3Ryaz1FTVAmZz1BMjkzQTA2NTA0QkZFNDI5QkMwMTlEOUYxRDBBRDRERjY0NTU1QUM3JmxraWQ9VVJMX0hFTFAgKSBmb3IgbWVyZSBpbmZvLCBlbGxlciBrb250YWt0IG9zICggaHR0cHM6Ly9oZWxwLm5ldGZsaXguY29tL2NvbnRhY3R1cz9sbmt0cms9RU1QJmc9QTI5M0EwNjUwNEJGRTQyOUJDMDE5RDlGMUQwQUQ0REY2NDU1NUFDNyZsa2lkPVVSTF9DT05UQUNUICkuDQoNCuKAkyBOZXRmbGl4DQoNClNFIEFMTEUgU0VSSUVSIE9HIEZJTE0gOiBodHRwczovL3d3dy5uZXRmbGl4LmNvbS9icm93c2U_bG5rdHJrPUVNUCZnPUEyOTNBMDY1MDRCRkU0MjlCQzAxOUQ5RjFEMEFENERGNjQ1NTVBQzcmbGtpZD1VUkxfSE9NRV8yDQoNCi0tLS0tLS0tLS0tLS0tLQ0KDQpTcMO4cmdzbcOlbD8gUmluZyBww6UgODAgMjUgMTIgNTINCiANCkRlbm5lIGUtbWFpbCBibGV2IHNlbmR0IHRpbCBkaWcgc29tIGVuIGRlbCBhZiBkaXQgTmV0ZmxpeC1tZWRsZW1za2FiLg0KDQpEdSBrYW4gbsOlciBzb20gaGVsc3Qgw6ZuZHJlIGRpbmUgZS1tYWlsaW5kc3RpbGxpbmdlciBww6Ugc2lkZW4gS29tbXVuaWthdGlvbnNpbmRzdGlsbGluZ2VyIChodHRwczovL3d3dy5uZXRmbGl4LmNvbS9NYW5hZ2VTdWJzY3JpcHRpb25zP2lkPUJRRTBBQUVCRUJlTWlsa2daZUNqMVpOJTJCcG9nc3hycUFrQ3NYcmNmZDJHYSUyQlJKVnlDVTJENFg1SG1UQmw3aERvM1FOTHlvOCUyRkg2Z01WUmpOWHJydndKczRVbjJZN2tEUmd1MCUyRmR0T0VhVURrZGhoSmU4TFkwZEJZJTJGdnZ4JTJGaE8wREIlMkJta0FhTmpXZUVLanBmTDJVY2R0blliZ2FsVGF3MUpvdVVPYlpCUjBsMGtlWFR3MXlWRUoyMEtJa1BIaXpNaGFJN1F3RjhvcGolMkZlaGVBaUI5RVlGSWxjUmxYbGZHbjFRJTNEJTNEJm1pZD1ub25lJmxua3Ryaz1FTVAmZz1BMjkzQTA2NTA0QkZFNDI5QkMwMTlEOUYxRDBBRDRERjY0NTU1QUM3JmxraWQ9VVJMX0NPTU1fU0VUVElOR1MpIHDDpSBkaW4ga29udG8uDQpVbmRsYWQgYXQgYmVzdmFyZSBkZW5uZSBlLW1haWwsIGRhIHZpIGlra2Uga2FuIHN2YXJlIGZyYSBkZW5uZSBlLW1haWxhZHJlc3NlLiBHw6UgdGlsIHZvcmVzIEhqw6ZscC1jZW50ZXIgcMOlIGh0dHBzOi8vaGVscC5uZXRmbGl4LmNvbS9oZWxwP2xua3Ryaz1FTVAmZz1BMjkzQTA2NTA0QkZFNDI5QkMwMTlEOUYxRDBBRDRERjY0NTU1QUM3JmxraWQ9VVJMX0hFTFBfMywgaHZpcyBkdSBoYXIgYnJ1ZyBmb3IgaGrDpmxwIGVsbGVyIMO4bnNrZXIgYXQga29udGFrdGUgb3MuDQogDQpEZW5uZSBlLW1haWwgYmxldiBzZW5kdCB0aWwgW21iYWxzbG93QGdtYWlsLmNvbV0gYWYgTmV0ZmxpeC4NCiANCg0KU1JDOiAxMjQ5MF9kYV9ESw0KDQogDQpCcnVnIGFmIE5ldGZsaXgtdGplbmVzdGVuIG9nIC13ZWJzdGVkZXQgZXIgdW5kZXJsYWd0IHZvcmVzIGJydWdlcmJldGluZ2Vsc2VyIChodHRwczovL3d3dy5uZXRmbGl4LmNvbS9UZXJtc09mVXNlP2xua3Ryaz1FTVAmZz1BMjkzQTA2NTA0QkZFNDI5QkMwMTlEOUYxRDBBRDRERjY0NTU1QUM3JmxraWQ9VVJMX1RFUk1TKSBvZyBwcml2YXRsaXZzZXJrbMOmcmluZyAoaHR0cHM6Ly93d3cubmV0ZmxpeC5jb20vUHJpdmFjeVBvbGljeT9sbmt0cms9RU1QJmc9QTI5M0EwNjUwNEJGRTQyOUJDMDE5RDlGMUQwQUQ0REY2NDU1NUFDNyZsa2lkPVVSTF9QUklWQUNZKS4NCiANCuKAqk5ldGZsaXggSW50ZXJuYXRpb25hbCBCLlYu4oCsDQo="
}
},
{
"partId": "1",
"mimeType": "text/html",
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "text/html; charset=utf-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "quoted-printable"
}
],
"body": {
"size": 19127,
"data": "PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsIC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiIHN0eWxlPSJwYWRkaW5nOjA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjM0LCAyMzQsIDIzNCk7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjM0LCAyMzQsIDIzNCk7bWFyZ2luLXRvcDowOyI-DQogPGhlYWQ-IA0KICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCBjaGFyc2V0PVVURi04Ij4gDQogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI-IA0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgIEBtZWRpYSB5YWhvbyB7DQogIHRhYmxlIHtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBtc28tdGFibGUtbHNwYWNlOjBwdDsgbXNvLXRhYmxlLXJzcGFjZTowcHQ7IHRhYmxlLWxheW91dDogZml4ZWQ7fQ0KICB0YWJsZSB0YWJsZSB7IHRhYmxlLWxheW91dDogYXV0bzsgfQ0KICB9DQogICAgKiBbZGF0YS10ZXJtXSB7Ym9yZGVyLWJvdHRvbTogbm9uZSAhaW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7fQ0KICAgIC5paSBhIHtjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OyB0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50O30NCiAgICBhW3gtYXBwbGUtZGF0YS1kZXRlY3RvcnNdIHsgY29sb3I6IGluaGVyaXQgIWltcG9ydGFudDsgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50OyBmb250LWZhbWlseTogaW5oZXJpdCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50OyBsaW5lLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50OyB9DQpib2R5LCAuY29udGFpbmVyLCBodG1sIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0VBRUFFQTsNCiAgbWFyZ2luLXRvcDogMDsNCn0NCi5oaWRlLCAuaGlkZSBkaXYsIC5oaWRlIHRhYmxlLCAuaGlkZSB0ZCwgLmhpZGUgdHIsIC5oaWRlIGEsIC5oaWRlIGltZyB7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7IHdpZHRoOjAgIWltcG9ydGFudDsgaGVpZ2h0OjAgIWltcG9ydGFudDsgbWF4LWhlaWdodDowICFpbXBvcnRhbnQ7IGxpbmUtaGVpZ2h0OjAgIWltcG9ydGFudDsgbXNvLWhpZGU6YWxsICFpbXBvcnRhbnQ7IG92ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50OyB2aXNpYmlsaXR5OmhpZGRlbiAhaW1wb3J0YW50O30NCmltZyB7DQogIC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7DQogIGJvcmRlcjogbm9uZTsNCiAgb3V0bGluZTogbm9uZTsNCn0NCi5kZXNrdG9wLWhpZGUsIC5kZXNrdG9wLWhpZGUgaW1nLCAuZGVza3RvcC1oaWRlLW1heCwgLmRlc2t0b3AtaGlkZS1tYXggaW1nIHsNCiAgZGlzcGxheTpub25lOw0KICBtc28taGlkZTogYWxsOw0KfQ0KLmdtYWlsLWZpeC1uby1pbmxpbmUgew0KICBkaXNwbGF5Om5vbmU7DQogIGRpc3BsYXk6bm9uZSAhaW1wb3J0YW50Ow0KfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7DQogIC5pb3MtaGlkZSwgLm1vYmlsZS1oaWRlIHsNCiAgICBkaXNwbGF5OiBub25lOw0KICB9DQogIC5kZXNrdG9wLWhpZGUsIC5kZXNrdG9wLWhpZGUgaW1nIHsNCiAgICBkaXNwbGF5OiBpbml0aWFsICFpbXBvcnRhbnQ7DQogIH0NCiAgdGFibGUuZGVza3RvcC1oaWRlIHsNCiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50Ow0KICB9DQp9DQphIHsNCiAgY29sb3I6IGluaGVyaXQgIWltcG9ydGFudDsNCn0NCmEgaW1nIHsNCiAgYm9yZGVyLXN0eWxlOiBub25lOw0KfQ0KLmlvc25vbmxpbmsgYXsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7DQp9DQouY29weSBhIHsNCiAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnM7DQogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lICFpbXBvcnRhbnQ7DQogIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7DQp9DQouY29weSBhLnNlY29uZGFyeS1jdGEgew0KICBjb2xvcjogI2U1MDkxNCAhaW1wb3J0YW50Ow0KfQ0KaHRtbCwgYm9keSB7DQogIHBhZGRpbmc6IDA7DQogIG1hcmdpbjogMDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI0VBRUFFQTsNCn0NCi8qIENvbnRlbnQgKi8NCi5jb250ZW50LXNoZWxsIHsNCiAgYmFja2dyb3VuZDogdXJsKCdodHRwOi8vY2RuLm5mbHhpbWcuY29tL3VzL2VtYWlsL2hpdGNoL25ldGZsaXgtY3JvcC5wbmcnKSBuby1yZXBlYXQgI2ZmZmZmZjsNCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsNCn0NCmJvZHkgew0KICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2FuczsNCiAgY29sb3I6ICMyMjFGMUY7DQp9DQouaGVscC1jZW50ZXItbGluayB7DQogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOw0KICBmb250LXdlaWdodDogYm9sZDsNCn0NCkBtZWRpYSAobWF4LXdpZHRoOiA1OTlweCkgew0KICAuaW9zLWhpZGUtbWF4IHsNCiAgICBkaXNwbGF5OiBub25lOw0KICB9DQogIC5pbmJveC1maXggew0KICAgIGRpc3BsYXk6IG5vbmU7DQogIH0NCiAgLmRlc2t0b3AtaGlkZS1tYXgsIC5kZXNrdG9wLWhpZGUtbWF4IGltZyB7DQogICAgZGlzcGxheTogaW5pdGlhbCAhaW1wb3J0YW50Ow0KICB9DQp9DQovKiBGb290ZXIgKi8NCi5mb290ZXItc2hlbGwsIC5mb290ZXItdGFibGUsIC5mb290ZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIxRjFGOw0KfQ0KLmZvb3RlciB7DQogIA0KICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2FuczsNCiAgZm9udC1zaXplOiAxM3B4Ow0KICBjb2xvcjogI0E5QTZBNjsNCiAgbGluZS1oZWlnaHQ6IDE2cHg7DQp9DQouZm9vdGVyLWNvcHkgew0KICBwYWRkaW5nOiAxNXB4IDkwcHggMCA5MHB4Ow0KfQ0KLmZvb3Rlci1jb3B5LW5vLXBhZGRpbmcgew0KICBwYWRkaW5nOiAwIDkwcHggMCA5MHB4Ow0KfQ0KLmZvb3Rlci5xdWVzdGlvbnMgew0KICBwYWRkaW5nOiAzNHB4IDkwcHggMCA5MHB4ICFpbXBvcnRhbnQ7DQp9DQouZm9vdGVyLmZvb3Rlci1jZW50ZXIgew0KICBwYWRkaW5nOiAxNXB4IDAgMCAwOw0KICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsNCn0NCi5mb290ZXIgYSwgLmZvb3Rlci1jb3B5IGEgew0KICBjb2xvcjogI0E5QTZBNiAhaW1wb3J0YW50Ow0KICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCkBtZWRpYSAobWF4LXdpZHRoOiA1OTlweCkgew0KICAuc2hlbGwsIC5zaGVsbC1mb290ZXIgew0KICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogIH0NCn0NCkBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkgew0KICAuZm9vdGVyIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDglICFpbXBvcnRhbnQ7DQogICAgcGFkZGluZy1yaWdodDogOCUgIWltcG9ydGFudDsNCiAgfQ0KICAuZm9vdGVyLWNvcHksIC5mb290ZXItY29weS1uby1wYWRkaW5nLCAuZm9vdGVyLnF1ZXN0aW9ucyB7DQogICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7DQogICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50Ow0KICB9DQp9DQovKiBFbmQgRm9vdGVyICovDQogICAgLyogQ29weSAqLw0KLmNvcHktc2hlbGwgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOw0KfQ0KLmNvcHkgew0KICBwYWRkaW5nOiAyMnB4IDkwcHggMCA5MHB4Ow0KICBmb250LWZhbWlseTogSGVsdmV0aWNhIE5ldWUsSGVsdmV0aWNhLFJvYm90byxTZWdvZSBVSSxzYW5zLXNlcmlmOw0KICBmb250LXNpemU6IDE4cHg7DQogIGxpbmUtaGVpZ2h0OiAyNHB4Ow0KICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsNCiAgY29sb3I6ICMyMjFGMUY7DQp9DQpAbWVkaWEgKG1heC13aWR0aDogNTAwcHgpIHsNCiAgLmNvcHkgew0KICAgIHBhZGRpbmc6IDIwcHggOCUgMCA4JSAhaW1wb3J0YW50Ow0KICB9DQp9DQovKiBFbmQgQ29weSAqLw0KLyogRXNjYXBlIEhhdGNoICovDQouZXNjYXBlLWhhdGNoLW1pbGQtc2hlbGwgew0KICBwYWRkaW5nOiA1MHB4IDkwcHggMzhweCA5MHB4Ow0KfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7DQogIC5lc2NhcGUtaGF0Y2gtbWlsZC1zaGVsbCB7DQogICAgcGFkZGluZzogNDBweCA4JSAyMHB4IDglICFpbXBvcnRhbnQ7DQogIH0NCn0NCi5lc2NhcGUtaGF0Y2gtbWlsZC5iYXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTUwOTE0ICFpbXBvcnRhbnQ7DQogIGhlaWdodDogM3B4Ow0KICBmb250LXNpemU6IDAgIWltcG9ydGFudDsNCiAgbGluZS1oZWlnaHQ6IDAgIWltcG9ydGFudDsNCn0NCi5lc2NhcGUtaGF0Y2gtbWlsZC5iYXIgaW1nIHsNCiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCn0NCi5lc2NhcGUtaGF0Y2gtbWlsZC50ZXh0IHsNCiAgY29sb3I6ICNFNTA5MTQgIWltcG9ydGFudDsNCiAgZm9udC1mYW1pbHk6IEhlbHZldGljYSBOZXVlLEhlbHZldGljYSxSb2JvdG8sU2Vnb2UgVUksc2Fucy1zZXJpZjsNCiAgZm9udC1zaXplOiAxNXB4Ow0KICBsaW5lLWhlaWdodDogMTdweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIHBhZGRpbmc6IDE3cHggMCAwIDA7DQogIHZlcnRpY2FsLWFsaWduOiBib3R0b207DQogIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Ow0KfQ0KYS5lc2NhcGUtaGF0Y2gtbWlsZC5saW5rIHsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7DQp9DQoNCi5lc2NhcGUtaGF0Y2gtbWlsZC50ZXh0IC5hcnJvdyB7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgZm9udC1zaXplOiAxNXB4Ow0KICBsaW5lLWhlaWdodDogMTdweDsNCiAgdmVydGljYWwtYWxpZ246IHRvcDsNCiAgcGFkZGluZzogMS44cHggMCAwIDZweDsNCn0NCi5lc2NhcGUtaGF0Y2gtbWlsZC50ZXh0IC5hcnJvdy5ydGwgew0KICBwYWRkaW5nOiAxLjhweCA2cHggMCAwOw0KfQ0KLmVzY2FwZS1oYXRjaC1taWxkLXRhYmxlOmFjdGl2ZSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7DQp9DQovKiBFbmQgRXNjYXBlIEhhdGNoICovDQovKiBIZWFkbGluZSAqLw0KLmhlYWRsaW5lIHsNCiAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnM7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LXNpemU6IDMycHg7DQogIGNvbG9yOiAjMjIxRjFGOw0KICBsaW5lLWhlaWdodDogMzZweDsNCiAgcGFkZGluZzogNDBweCA5MHB4IDEwcHggOTBweDsNCn0NCkBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkgew0KICAuaGVhZGxpbmUgew0KICAgIHBhZGRpbmc6IDI1cHggOCUgMTBweCA4JSAhaW1wb3J0YW50Ow0KICAgIGZvbnQtc2l6ZTogMjhweCAhaW1wb3J0YW50Ow0KICB9DQp9DQovKiBFbmQgSGVhZGxpbmUgKi8NCi8qIExvZ28gKi8NCi5sb2dvIHsNCiAgcGFkZGluZzogNDZweCAwIDAgMDsNCn0NCkBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkgew0KICAubG9nbyB7DQogICAgcGFkZGluZzogNDJweCA4JSAwIDglICFpbXBvcnRhbnQ7DQogIH0NCiAgLmxvZ28gaW1nIHsNCiAgICB3aWR0aDogMTMwcHggIWltcG9ydGFudDsNCiAgfQ0KfQ0KLyogRW5kIExvZ28gKi8NCg0KICAgIA0KICA8L3N0eWxlPiANCiA8L2hlYWQ-IA0KIDxib2R5IGJnY29sb3I9IiNFQUVBRUEiIHN0eWxlPSJmb250LWZhbWlseTpIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zO2NvbG9yOnJnYigzNCwgMzEsIDMxKTtwYWRkaW5nOjA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjM0LCAyMzQsIDIzNCk7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjM0LCAyMzQsIDIzNCk7bWFyZ2luLXRvcDowOyI-IA0KICA8IS0tLyogMTAwJSBTaXplIENvbnRhaW5lciAtLT4gDQogIDwhLS0gUHJldmlldyBUZXh0IC0tPiANCiAgPGRpdiBjbGFzcz0iaGlkZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTt3aWR0aDowO2hlaWdodDowO21heC1oZWlnaHQ6MDtsaW5lLWhlaWdodDowO21zby1oaWRlOmFsbDtvdmVyZmxvdzpoaWRkZW47dmlzaWJpbGl0eTpoaWRkZW47Ij48L2Rpdj4gDQogIDwhLS0gRW5kIFByZXZpZXcgVGV4dCAtLT4gDQogIDx0YWJsZSBjbGFzcz0iY29udGFpbmVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigyMzQsIDIzNCwgMjM0KTttYXJnaW4tdG9wOjA7Ij4gDQogICA8dGJvZHk-DQogICAgPHRyPiANCiAgICAgPHRkIGFsaWduPSJjZW50ZXIiPiANCiAgICAgIDwhLS0vKiBIZXJvICsgQ29udGVudCAtLT4gDQogICAgICA8dGFibGUgY2xhc3M9InNoZWxsIiB3aWR0aD0iNjAwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCI-IA0KICAgICAgIDwhLS0vKiBDb250ZW50IC0tPiANCiAgICAgICA8dGJvZHk-DQogICAgICAgIDx0cj4gDQogICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnQtc2hlbGwiIGJnY29sb3I9IiNmZmZmZmYiIHN0eWxlPSJiYWNrZ3JvdW5kOnVybChodHRwOi8vY2RuLm5mbHhpbWcuY29tL3VzL2VtYWlsL2hpdGNoL25ldGZsaXgtY3JvcC5wbmcpIG5vLXJlcGVhdCByZ2IoMjU1LCAyNTUsIDI1NSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtY29sb3I6cmdiKDI1NSwgMjU1LCAyNTUpOyI-IA0KICAgICAgICAgIDx0YWJsZSBjbGFzcz0iY29udGVudCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIj4gDQogICAgICAgICAgIDwhLS0gTG9nbyAtLT4gDQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgPHRkIGNsYXNzPSJsb2dvIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0icGFkZGluZzo0NnB4IDAgMCAwOyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm5ldGZsaXguY29tL2Jyb3dzZT9sbmt0cms9RU1QJmFtcDtnPUEyOTNBMDY1MDRCRkU0MjlCQzAxOUQ5RjFEMEFENERGNjQ1NTVBQzcmYW1wO2xraWQ9VVJMX0hPTUVfMiIgc3R5bGU9ImNvbG9yOmluaGVyaXQ7Ij4gPGltZyBzcmM9Imh0dHA6Ly9jZG4ubmZseGltZy5jb20vdXMvZW1haWwvbG9nby9uZXdEZXNpZ24vbG9nb192Mi5wbmciIGFsdD0iTmV0ZmxpeCIgd2lkdGg9IjE0NSIgYWxpZ249ImNlbnRlciIgc3R5bGU9Ii1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6YmljdWJpYztib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmU7Ij4gPC9hPiA8L3RkPiANCiAgICAgICAgICAgIDwvdHI-IA0KICAgICAgICAgICAgPCEtLSBFbmQgTG9nbyAtLT4gDQogICAgICAgICAgICA8IS0tIEhlYWRsaW5lIC0tPiANCiAgICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgPHRkIGNsYXNzPSJoZWFkbGluZSBoZWFkbGluZS1pbXBvcnRhbnQiIHN0eWxlPSJmb250LWZhbWlseTpIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjMycHg7Y29sb3I6cmdiKDM0LCAzMSwgMzEpO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzo0MHB4IDkwcHggMTBweCA5MHB4OyI-IERpbiBwcsO4dmVwZXJpb2RlIGVyIG7DpnN0ZW4mbmJzcDtzbHV0IDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICA8IS0tIEVuZCBIZWFkbGluZSAtLT4gDQogICAgICAgICAgICA8IS0tIENvcHkgLS0-IA0KICAgICAgICAgICAgPHRyPiANCiAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvcHkgY29weS1pbXBvcnRhbnQiIHN0eWxlPSJwYWRkaW5nOjIycHggOTBweCAwIDkwcHg7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgUm9ib3RvLCBTZWdvZSBVSSwgc2Fucy1zZXJpZjtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoyNHB4Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Y29sb3I6cmdiKDM0LCAzMSwgMzEpOyI-IEhlaiBNYXRoaWFzIDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICA8IS0tIEVuZCBDb3B5IC0tPiANCiAgICAgICAgICAgIDwhLS0gQ29weSAtLT4gDQogICAgICAgICAgICA8dHI-IA0KICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29weSBjb3B5LWltcG9ydGFudCIgc3R5bGU9InBhZGRpbmc6MjJweCA5MHB4IDAgOTBweDtmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBSb2JvdG8sIFNlZ29lIFVJLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjI0cHg7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtjb2xvcjpyZ2IoMzQsIDMxLCAzMSk7Ij4gVmkgaMOlYmVyLCBkdSBlciBsaWdlIHPDpSBnbGFkIGZvciBOZXRmbGl4LCBzb20gdmkgZXIgZm9yIGF0IGhhdmUgZGlnIHNvbSBtZWRsZW0uIEJsaXYgaG9zIG9zLCBvZyBmw6UgZ2zDpmRlIGFmIGVuZG51IGZsZXJlIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm5ldGZsaXguY29tL2Jyb3dzZT9sbmt0cms9RU1QJmFtcDtnPUEyOTNBMDY1MDRCRkU0MjlCQzAxOUQ5RjFEMEFENERGNjQ1NTVBQzcmYW1wO2xraWQ9VVJMX0hPTUUiIHN0eWxlPSJjb2xvcjppbmhlcml0O2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgQXJpYWwsIHNhbnM7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjppbmhlcml0OyI-ZmFudGFzdGlza2Ugc2VyaWVyIG9nIGZpbG08L2E-LiBIdmlzIGR1IGlra2UgYWZtZWxkZXIgZGl0IG1lZGxlbXNrYWIsIHZpbCBkZXQgYXV0b21hdGlzayBmb3J0c8OmdHRlLCBvZyBkZXIgdmlsIGJsaXZlIHRydWtrZXQgYmV0YWxpbmcgdG9yc2RhZyBkZW4gMjEuIGZlYnJ1YXIgMjAxOSwgbsOlciBkaW4gZ3JhdGlzIHByw7h2ZXBlcmlvZGUgdWRsw7hiZXIuIFRhaywgZm9yZGkgZHUgYmxpdmVyIGhvcyBvcy4gPC90ZD4gDQogICAgICAgICAgICA8L3RyPiANCiAgICAgICAgICAgIDwhLS0gRW5kIENvcHkgLS0-IA0KICAgICAgICAgICAgPCEtLSBDb3B5IC0tPiANCiAgICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgPHRkIGNsYXNzPSJjb3B5IGNvcHktaW1wb3J0YW50IiBzdHlsZT0icGFkZGluZzoyMnB4IDkwcHggMCA5MHB4O2ZvbnQtZmFtaWx5OkhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIFJvYm90bywgU2Vnb2UgVUksIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MjRweDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2NvbG9yOnJnYigzNCwgMzEsIDMxKTsiPiBWaSBlciBoZXIgZm9yIGF0IGhqw6ZscGUsIGh2aXMgZHUgaGFyIGJydWcgZm9yIGRldC4gR8OlIHRpbCB2b3JlcyA8YSBocmVmPSJodHRwczovL2hlbHAubmV0ZmxpeC5jb20vaGVscD9sbmt0cms9RU1QJmFtcDtnPUEyOTNBMDY1MDRCRkU0MjlCQzAxOUQ5RjFEMEFENERGNjQ1NTVBQzcmYW1wO2xraWQ9VVJMX0hFTFAiIHN0eWxlPSJjb2xvcjppbmhlcml0O2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgQXJpYWwsIHNhbnM7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjppbmhlcml0OyI-SGrDpmxwLWNlbnRlcjwvYT4gZm9yIG1lcmUgaW5mbywgZWxsZXIgPGEgaHJlZj0iaHR0cHM6Ly9oZWxwLm5ldGZsaXguY29tL2NvbnRhY3R1cz9sbmt0cms9RU1QJmFtcDtnPUEyOTNBMDY1MDRCRkU0MjlCQzAxOUQ5RjFEMEFENERGNjQ1NTVBQzcmYW1wO2xraWQ9VVJMX0NPTlRBQ1QiIHN0eWxlPSJjb2xvcjppbmhlcml0O2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgQXJpYWwsIHNhbnM7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjppbmhlcml0OyI-a29udGFrdCBvczwvYT4uIDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICA8IS0tIEVuZCBDb3B5IC0tPiANCiAgICAgICAgICAgIDwhLS0gQ29weSAtLT4gDQogICAgICAgICAgICA8dHI-IA0KICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29weSBjb3B5LWltcG9ydGFudCIgc3R5bGU9InBhZGRpbmc6MjJweCA5MHB4IDAgOTBweDtmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBSb2JvdG8sIFNlZ29lIFVJLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjI0cHg7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtjb2xvcjpyZ2IoMzQsIDMxLCAzMSk7Ij4g4oCTIE5ldGZsaXggPC90ZD4gDQogICAgICAgICAgICA8L3RyPiANCiAgICAgICAgICAgIDwhLS0gRW5kIENvcHkgLS0-IA0KICAgICAgICAgICAgPCEtLSBFc2NhcGUgSGF0Y2ggLS0-IA0KICAgICAgICAgICAgPHRyPiANCiAgICAgICAgICAgICA8dGQgY2xhc3M9ImVzY2FwZS1oYXRjaC1taWxkLXNoZWxsIiBzdHlsZT0icGFkZGluZzo1MHB4IDkwcHggMzhweCA5MHB4OyI-IDxhIGNsYXNzPSJlc2NhcGUtaGF0Y2gtbWlsZCBsaW5rIiBocmVmPSJodHRwczovL3d3dy5uZXRmbGl4LmNvbS9icm93c2U_bG5rdHJrPUVNUCZhbXA7Zz1BMjkzQTA2NTA0QkZFNDI5QkMwMTlEOUYxRDBBRDRERjY0NTU1QUM3JmFtcDtsa2lkPVVSTF9IT01FXzMiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0OyI-IA0KICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJlc2NhcGUtaGF0Y2gtbWlsZC10YWJsZSIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIj4gDQogICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICA8dHI-IA0KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJlc2NhcGUtaGF0Y2gtbWlsZCBiYXIiIGNvbHNwYW49IjIiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigyMjksIDksIDIwKTtoZWlnaHQ6M3B4O2ZvbnQtc2l6ZTowO2xpbmUtaGVpZ2h0OjA7Ij4gPGltZyBzcmM9Imh0dHA6Ly9jZG4ubmZseGltZy5jb20vdXMvZW1haWwvaGl0Y2gvcmVkLXBpeGVsLmpwZyIgYWx0PSIiIHdpZHRoPSI0MjAiIGhlaWdodD0iMSIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtkaXNwbGF5OmJsb2NrOy1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6YmljdWJpYztib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJTtib3JkZXItc3R5bGU6bm9uZTsiPiA8L3RkPiANCiAgICAgICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImVzY2FwZS1oYXRjaC1taWxkIHRleHQiIHN0eWxlPSJjb2xvcjpyZ2IoMjI5LCA5LCAyMCk7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgUm9ib3RvLCBTZWdvZSBVSSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxN3B4O2ZvbnQtd2VpZ2h0OmJvbGQ7cGFkZGluZzoxN3B4IDAgMCAwO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTt0ZXh0LWRlY29yYXRpb246bm9uZTsiPiBTRSBBTExFIFNFUklFUiBPRyBGSUxNPHNwYW4gY2xhc3M9ImFycm93ICIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE3cHg7dmVydGljYWwtYWxpZ246dG9wO3BhZGRpbmc6MS44cHggMCAwIDZweDsiPjxpbWcgc3JjPSJodHRwOi8vY2RuLm5mbHhpbWcuY29tL3VzL2VtYWlsL2hpdGNoL3JpZ2h0LWNhcnJvdC5wbmciIGFsdD0iPiIgd2lkdGg9IjciIHN0eWxlPSJib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7ZGlzcGxheTppbmxpbmUtYmxvY2s7LW1zLWludGVycG9sYXRpb24tbW9kZTpiaWN1YmljO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtib3JkZXItc3R5bGU6bm9uZTsiPjwvc3Bhbj4gPC90ZD4gDQogICAgICAgICAgICAgICAgIDwvdHI-IA0KICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICA8L3RhYmxlPiA8L2E-IDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICA8IS0tIEVuZCBFc2NhcGUgSGF0Y2ggLS0-IA0KICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgIDwvdGFibGU-IDwvdGQ-IA0KICAgICAgICA8L3RyPiANCiAgICAgICA8L3Rib2R5Pg0KICAgICAgPC90YWJsZT4gDQogICAgICA8dGFibGUgY2xhc3M9InNoZWxsLWZvb3RlciIgd2lkdGg9IjYwMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiPiANCiAgICAgICA8IS0tLyogRm9vdGVyIC0tPiANCiAgICAgICA8dGJvZHk-DQogICAgICAgIDx0cj4gDQogICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnQtc2hlbGwtZm9vdGVyIj4gDQogICAgICAgICAgPHRhYmxlIGNsYXNzPSJmb290ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmdiKDM0LCAzMSwgMzEpO2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgQXJpYWwsIHNhbnM7Zm9udC1zaXplOjEzcHg7Y29sb3I6cmdiKDE2OSwgMTY2LCAxNjYpO2xpbmUtaGVpZ2h0OjE2cHg7Ij4gDQogICAgICAgICAgIDwhLS0gLyogRm9vdGVyICAtLT4gDQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgPHRkIGNsYXNzPSJmb290ZXIgcXVlc3Rpb25zIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZ2IoMzQsIDMxLCAzMSk7cGFkZGluZzozNHB4IDkwcHggMCA5MHB4O2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgQXJpYWwsIHNhbnM7Zm9udC1zaXplOjEzcHg7Y29sb3I6cmdiKDE2OSwgMTY2LCAxNjYpO2xpbmUtaGVpZ2h0OjE2cHg7Ij4gU3DDuHJnc23DpWw_IFJpbmcgcMOlIDgwIDI1IDEyIDUyIDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICA8dHI-IA0KICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZm9vdGVyIGZvb3Rlci1jb3B5IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZ2IoMzQsIDMxLCAzMSk7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLCBBcmlhbCwgc2Fucztmb250LXNpemU6MTNweDtjb2xvcjpyZ2IoMTY5LCAxNjYsIDE2Nik7bGluZS1oZWlnaHQ6MTZweDtwYWRkaW5nOjE1cHggOTBweCAwIDkwcHg7Ij4gRGVubmUgZS1tYWlsIGJsZXYgc2VuZHQgdGlsIGRpZyBzb20gZW4gZGVsIGFmIGRpdCBOZXRmbGl4LW1lZGxlbXNrYWIuIER1IGthbiBuw6VyIHNvbSBoZWxzdCDDpm5kcmUgZGluZSBlLW1haWxpbmRzdGlsbGluZ2VyIHDDpSBzaWRlbiA8YSBzdHlsZT0iY29sb3I6I0E5QTZBNjtjb2xvcjpyZ2IoMTY5LCAxNjYsIDE2Nik7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjppbmhlcml0OyIgaHJlZj0iaHR0cHM6Ly93d3cubmV0ZmxpeC5jb20vTWFuYWdlU3Vic2NyaXB0aW9ucz9pZD1CUUUwQUFFQkVCZU1pbGtnWmVDajFaTiUyQnBvZ3N4cnFBa0NzWHJjZmQyR2ElMkJSSlZ5Q1UyRDRYNUhtVEJsN2hEbzNRTkx5bzglMkZINmdNVlJqTlhycnZ3SnM0VW4yWTdrRFJndTAlMkZkdE9FYVVEa2RoaEplOExZMGRCWSUyRnZ2eCUyRmhPMERCJTJCbWtBYU5qV2VFS2pwZkwyVWNkdG5ZYmdhbFRhdzFKb3VVT2JaQlIwbDBrZVhUdzF5VkVKMjBLSWtQSGl6TWhhSTdRd0Y4b3BqJTJGZWhlQWlCOUVZRklsY1JsWGxmR24xUSUzRCUzRCZhbXA7bWlkPW5vbmUmYW1wO2xua3Ryaz1FTVAmYW1wO2c9QTI5M0EwNjUwNEJGRTQyOUJDMDE5RDlGMUQwQUQ0REY2NDU1NUFDNyZhbXA7bGtpZD1VUkxfQ09NTV9TRVRUSU5HUyI-S29tbXVuaWthdGlvbnNpbmRzdGlsbGluZ2VyPC9hPiBww6UgZGluIGtvbnRvLiA8L3RkPiANCiAgICAgICAgICAgIDwvdHI-IA0KICAgICAgICAgICAgPHRyPiANCiAgICAgICAgICAgICA8dGQgY2xhc3M9ImZvb3RlciBmb290ZXItY29weSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmdiKDM0LCAzMSwgMzEpO2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgQXJpYWwsIHNhbnM7Zm9udC1zaXplOjEzcHg7Y29sb3I6cmdiKDE2OSwgMTY2LCAxNjYpO2xpbmUtaGVpZ2h0OjE2cHg7cGFkZGluZzoxNXB4IDkwcHggMCA5MHB4OyI-IFVuZGxhZCBhdCBiZXN2YXJlIGRlbm5lIGUtbWFpbCwgZGEgdmkgaWtrZSBrYW4gc3ZhcmUgZnJhIGRlbm5lIGUtbWFpbGFkcmVzc2UuIEfDpSB0aWwgdm9yZXMgSGrDpmxwLWNlbnRlciBww6UgPGEgaHJlZj0iaHR0cHM6Ly9oZWxwLm5ldGZsaXguY29tL2hlbHA_bG5rdHJrPUVNUCZhbXA7Zz1BMjkzQTA2NTA0QkZFNDI5QkMwMTlEOUYxRDBBRDRERjY0NTU1QUM3JmFtcDtsa2lkPVVSTF9IRUxQXzMiIHN0eWxlPSJjb2xvcjojQTlBNkE2O2NvbG9yOnJnYigxNjksIDE2NiwgMTY2KTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2NvbG9yOmluaGVyaXQ7Ij5oZWxwLm5ldGZsaXguY29tPC9hPiwgaHZpcyBkdSBoYXIgYnJ1ZyBmb3IgaGrDpmxwIGVsbGVyIMO4bnNrZXIgYXQga29udGFrdGUgb3MuIDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICA8dHI-IA0KICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZm9vdGVyIGZvb3Rlci1jb3B5IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZ2IoMzQsIDMxLCAzMSk7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLCBBcmlhbCwgc2Fucztmb250LXNpemU6MTNweDtjb2xvcjpyZ2IoMTY5LCAxNjYsIDE2Nik7bGluZS1oZWlnaHQ6MTZweDtwYWRkaW5nOjE1cHggOTBweCAwIDkwcHg7Ij4gRGVubmUgZS1tYWlsIGJsZXYgc2VuZHQgdGlsIFs8YSBocmVmPSIjIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7IGNvbG9yOiAjQTlBNkE2O2NvbG9yOnJnYigxNjksIDE2NiwgMTY2KTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2NvbG9yOmluaGVyaXQ7Ij5tYmFsc2xvd0BnbWFpbC5jb208L2E-XSBhZiBOZXRmbGl4LiA8L3RkPiANCiAgICAgICAgICAgIDwvdHI-IA0KICAgICAgICAgICAgPHRyPiANCiAgICAgICAgICAgICA8dGQgY2xhc3M9ImZvb3RlciBmb290ZXItY29weS1uby1wYWRkaW5nIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZ2IoMzQsIDMxLCAzMSk7cGFkZGluZzowIDkwcHggMCA5MHB4O2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgQXJpYWwsIHNhbnM7Zm9udC1zaXplOjEzcHg7Y29sb3I6cmdiKDE2OSwgMTY2LCAxNjYpO2xpbmUtaGVpZ2h0OjE2cHg7Ij4gDQogICAgICAgICAgICAgIDwhLS1sZWdhbF9jb250ZW50X2Zvb3Rlci0tPiBTUkM6IDxhIGhyZWY9Imh0dHBzOi8vaGVscC5uZXRmbGl4LmNvbS9oZWxwP2xua3Ryaz1FTVAmYW1wO2c9QTI5M0EwNjUwNEJGRTQyOUJDMDE5RDlGMUQwQUQ0REY2NDU1NUFDNyZhbXA7bGtpZD1VUkxfSEVMUF80IiBzdHlsZT0iY29sb3I6I0E5QTZBNjt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjpyZ2IoMTY5LCAxNjYsIDE2Nik7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjppbmhlcml0OyI-MTI0OTBfZGFfREs8L2E-IDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICA8dHI-IA0KICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZm9vdGVyIGZvb3Rlci1jb3B5LW5vLXBhZGRpbmciIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigzNCwgMzEsIDMxKTtwYWRkaW5nOjAgOTBweCAwIDkwcHg7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLCBBcmlhbCwgc2Fucztmb250LXNpemU6MTNweDtjb2xvcjpyZ2IoMTY5LCAxNjYsIDE2Nik7bGluZS1oZWlnaHQ6MTZweDsiPiBCcnVnIGFmIE5ldGZsaXgtdGplbmVzdGVuIG9nIC13ZWJzdGVkZXQgZXIgdW5kZXJsYWd0IHZvcmVzIDxhIHN0eWxlPSJjb2xvcjojQTlBNkE2O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y29sb3I6cmdiKDE2OSwgMTY2LCAxNjYpO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y29sb3I6aW5oZXJpdDsiIGhyZWY9Imh0dHBzOi8vd3d3Lm5ldGZsaXguY29tL1Rlcm1zT2ZVc2U_bG5rdHJrPUVNUCZhbXA7Zz1BMjkzQTA2NTA0QkZFNDI5QkMwMTlEOUYxRDBBRDRERjY0NTU1QUM3JmFtcDtsa2lkPVVSTF9URVJNUyI-YnJ1Z2VyYmV0aW5nZWxzZXI8L2E-IG9nIDxhIHN0eWxlPSJjb2xvcjojQTlBNkE2O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y29sb3I6cmdiKDE2OSwgMTY2LCAxNjYpO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y29sb3I6aW5oZXJpdDsiIGhyZWY9Imh0dHBzOi8vd3d3Lm5ldGZsaXguY29tL1ByaXZhY3lQb2xpY3k_bG5rdHJrPUVNUCZhbXA7Zz1BMjkzQTA2NTA0QkZFNDI5QkMwMTlEOUYxRDBBRDRERjY0NTU1QUM3JmFtcDtsa2lkPVVSTF9QUklWQUNZIj5wcml2YXRsaXZzZXJrbMOmcmluZzwvYT4uIDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICA8dHI-IA0KICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZm9vdGVyIGZvb3Rlci1jb3B5LW5vLXBhZGRpbmciIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigzNCwgMzEsIDMxKTtwYWRkaW5nOjAgOTBweCAwIDkwcHg7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLCBBcmlhbCwgc2Fucztmb250LXNpemU6MTNweDtjb2xvcjpyZ2IoMTY5LCAxNjYsIDE2Nik7bGluZS1oZWlnaHQ6MTZweDsiPiA8c3BhbiBjbGFzcz0iIj48YSBocmVmPSJodHRwczovL3d3dy5uZXRmbGl4LmNvbS9icm93c2U_bG5rdHJrPUVNUCZhbXA7Zz1BMjkzQTA2NTA0QkZFNDI5QkMwMTlEOUYxRDBBRDRERjY0NTU1QUM3JmFtcDtsa2lkPVVSTF9IT01FXzQiIHN0eWxlPSJjb2xvcjojQTlBNkE2OyB0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50O2NvbG9yOnJnYigxNjksIDE2NiwgMTY2KTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2NvbG9yOmluaGVyaXQ7Ij7igKpOZXRmbGl4IEludGVybmF0aW9uYWwgQi5WLuKArDwvYT48L3NwYW4-IDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICA8dHI-IA0KICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZm9vdGVyIGZvb3Rlci1zcGFjZXIiIGhlaWdodD0iNDQiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigzNCwgMzEsIDMxKTtmb250LWZhbWlseTpIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnJnYigxNjksIDE2NiwgMTY2KTtsaW5lLWhlaWdodDoxNnB4OyI-ICZuYnNwOyANCiAgICAgICAgICAgICAgPCEtLWxlZ2FsX2NvbnRlbnRfZm9vdGVyLS0-IDxpbWcgc3JjPSJodHRwOi8vYmVhY29uLm5ldGZsaXguY29tL2ltZy9CQVFnQkVBRWEwQUoyVEhTc2dvc2lJTm5NTU9LUG5pdldLU0stV21ISEx3dnRtVGYyVERJX0d2SW9kUV9CQzNFQ0ZXMnBCNFJjMFNhNVR6aDJvT2FQMTc3eS0tTmZhXzluaHA5NlAtNHcycVR2MFo4SFpEZjRfTkwtenBuR0tpR3RiWGZYaUJjQW56d0ZhUDBsaGU0dzlRN1lOZHlMZ2pQY3pRckR0MnZQQXJmazhpRXlfWXRRT2RvbUpJVFdzWW1WY2VaSVRRb2NTTFpwbUpBTF9QeFdYZVBsc3J6eWVzVWlxQlhSaUNCRDlHZUlCR1dJU05iZWpqeEI0MzMxdUo4Tms2XzRjTjJZbDZaVkhBXzU2OWJLVXVBWHFrOGt2U1lud2VRTmJuOGNXMDNyVG1sQ2N2VkhsV1VIdGZqd25WZXlQUXl4Qy11b05oU05jRzJQYmljeDBGSmlhNnN2WUtZUjYzUm5FbkZlWVc4Yk8zYzRfZjY3amVQREhJZkwwUHF2a3ItMlZhMWdHTEhUbWxMNXJhTmRwM2tGMEVNMUdyVVRBeHdPcndHUll3eFBkdS1wbXhYSXVmZEw1T214X1BaU3VScEJTdjRWZWhrLiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7LW1zLWludGVycG9sYXRpb24tbW9kZTpiaWN1YmljO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTsiIGJvcmRlcj0iMCI-IDwvdGQ-IA0KICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgPC90YWJsZT4gPC90ZD4gDQogICAgICAgIDwvdHI-IA0KICAgICAgIDwvdGJvZHk-DQogICAgICA8L3RhYmxlPiA8L3RkPiANCiAgICA8L3RyPiANCiAgIDwvdGJvZHk-DQogIDwvdGFibGU-IA0KICA8IS0tIEZpeCBmb3IgR29vZ2xlIEluYm94IC0tPiANCiAgPHRhYmxlIGNsYXNzPSJpbmJveC1maXgiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjEiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ3aWR0aDogNjAwcHggIWltcG9ydGFudDsiPiANCiAgIDx0Ym9keT4NCiAgICA8dHI-IA0KICAgICA8dGQ-IDxpbWcgc3JjPSJodHRwOi8vY2RuLm5mbHhpbWcuY29tL3VzL2VtYWlsL3NwYWNlci5naWYiIHdpZHRoPSIyMDAiIGhlaWdodD0iMSIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtkaXNwbGF5OmJsb2NrOy1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6YmljdWJpYztib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7Ij4gPC90ZD4gDQogICAgIDx0ZD4gPGltZyBzcmM9Imh0dHA6Ly9jZG4ubmZseGltZy5jb20vdXMvZW1haWwvc3BhY2VyLmdpZiIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIxIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2Rpc3BsYXk6YmxvY2s7LW1zLWludGVycG9sYXRpb24tbW9kZTpiaWN1YmljO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTsiPiA8L3RkPiANCiAgICAgPHRkPiA8aW1nIHNyYz0iaHR0cDovL2Nkbi5uZmx4aW1nLmNvbS91cy9lbWFpbC9zcGFjZXIuZ2lmIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7ZGlzcGxheTpibG9jazstbXMtaW50ZXJwb2xhdGlvbi1tb2RlOmJpY3ViaWM7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lOyI-IDwvdGQ-IA0KICAgIDwvdHI-IA0KICAgPC90Ym9keT4NCiAgPC90YWJsZT4gDQogIDwhLS0gRml4IGZvciBHbWFpbCBvbiBpT1MgLS0-IA0KICA8ZGl2IGNsYXNzPSJpb3MtaGlkZS1tYXggZ21haWwtZml4LW5vLWlubGluZSIgc3R5bGU9IndoaXRlLXNwYWNlOm5vd3JhcDsgZm9udDoxNXB4IGNvdXJpZXI7IGxpbmUtaGVpZ2h0OjA7Ij4NCiAgICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQogIDwvZGl2PiAgIA0KIDwvYm9keT4NCjwvaHRtbD4="
}
}
]
},
"sizeEstimate": 29153
}
That's it for this guide! Now you can start exploring all the different options available in the Gmail API and all the other API and services. Hopefully this gives you an idea of how to get started integrating with the many different powerful tools offered by Google.
Below is screenshot of the full attached script that you can download at the bottom of the article.
Comments
0 comments
Please sign in to leave a comment.