Faspex authenticates users with an OAuth mechanism. This endpoint generates an OAuth token, using the grant type specified in the request. To use the generated OAuth token with the API, include the following token in the authorization header: "Authorization: Bearer {oauth_token}". For example:

"Authorization: Bearer HRuHfrm58QhGtZuLVqAptA"

The bearer token (OAuth token) is equivalent to the value of the "access_token" attribute returned in the initial request.

OAuth tokens are associated with Faspex users, so admin access will be granted only if the user that generated the token is an admin.


Create an OAuth token:

POST /auth/oauth2/token

Request Body: None

Request Parameters

Parameter Name Required/Optional Format Default Value Description
grant_type required string none Specifies the type of authentication to use. Available grant types:
  • password - Basic authorization
  • urn:ietf:params:oauth:grant-type:saml2-bearer - SAML assertion. See Generating an OAuth Token for a SAML User for additional instructions.
  • refresh_token - OAuth token created in the request is automatically refreshed (to extend the life of the token) so the user does not need to provide credentials again

Success Response Code

  • 201 Created - Returned with token information

Response Attributes

Attribute Name Format Description
access_token string OAuth token returned by the post request. This token expires before the refresh token.
token_type string The type of OAuth token (bearer is the type used with the Faspex v.4 API)
refresh_token string Token to submit in a POST request to receive new bearer token and new refresh token
expires_in integer Time left until token expires (in seconds)

Success Response Example

{
  "access_token":"Qs_9v5ZZzxm4-SylyUCOaA",
  "token_type":"bearer",
  "refresh_token":"RaW3uJjg2eTaHX32Sy1eKQ",
  "expires_in":86400
}

The following are examples of how to generate and use an OAuth token in requests:

  • Create OAuth token:
    curl -X POST -u {username} https://{faspex_url}/auth/oauth2/token?grant_type={grant_type}
    < br /> Note: Aspera recommends that you do not submit the user password along with the username in the request, instead allowing the system to return a prompt for the password.
  • Use OAuth token to access user data:
    curl -H "Authorization: Bearer {bearer_token}" https://{faspex_url}/api/users/
  • Refresh a token:
    curl -k -X POST "https://{faspex_url}/auth/oauth2/token?grant_type=refresh_token&refresh_token={refresh_token}"

Example Request and Response

Create OAuth token:

curl -X POST -u sam http://10.0.0.0/aspera/faspex/auth/oauth2/token?grant_type=password
{  
   "access_token":"YrPSD5XHC9J8V7-fAJG1yg",
   "token_type":"bearer",
   "refresh_token":"ceELnGrtCqEa61NlnGHu8A",
   "expires_in":86400
}

Use OAuth token to access user data (returns information for all users)

curl -k -H "Authorization: Bearer PgQux2MwJODFfmK5zhJGSA" https://10.0.0.0/aspera/faspex/api/users/
{  
   "id":"91",
   "name":"jsmith",
   "first_name":"John",
   "last_name":"Smith",
   "account_activated":true,
   "account_expires":false,
   "admin":true,
   "downloads_allowed":true,
   "uploads_allowed":true,
   "can_send_normal_packages":true,
   "can_send_to_all_faspex_users":true,
   "can_send_to_external_email":true,
   "created_at":"2016-09-02T15:25:18-05:00",
   "updated_at":"2017-07-17T17:37:03-05:00",
   "delete_packages_after_download":false,
   "user_profile_data_attributes":[  
      {  
         "created_at":"2016/09/02 15:25:18 -0500",
         "id":49,
         "updated_at":"2016/09/02 15:25:18 -0500",
         "user_id":91,
         "user_profile_field_id":6,
         "value":"",
         "user_profile_field_name":"Department"
      },
      {  
         "created_at":"2016/09/02 15:25:18 -0500",
         "id":50,
         "updated_at":"2016/09/02 15:25:18 -0500",
         "user_id":91,
         "user_profile_field_id":7,
         "value":"",
         "user_profile_field_name":"Country"
      }
   ],
   "memberships":[  
      {  
         "id":36,
         "e_workgroup_id":8,
         "e_workgroup_type":"Workgroup",
         "e_workgroup_name":"test_wg",
         "user_id":91,
         "can_read":true,
         "can_write":true,
         "is_wg_admin":false,
         "created_at":"2016/09/02 15:26:01 -0500",
         "updated_at":"2016/09/02 15:26:01 -0500"
      }
   ]
},

 . . . 
 
{  
"id":"122",
"name":"pamela+5@asperasoft.com",
"first_name":"pamela+5@asperasoft.com",
"last_name":"(external email)",
"account_activated":true,
"account_expires":false,
"admin":false,
"downloads_allowed":true,
"uploads_allowed":true,
"can_send_normal_packages":true,
"can_send_to_all_faspex_users":true,
"can_send_to_external_email":true,
"created_at":"2017-07-13T08:36:44-05:00",
"updated_at":"2017-07-13T08:36:44-05:00",
"delete_packages_after_download":false,
"user_profile_data_attributes":[  

],
"memberships":[  

]
}

Refresh a token (request and response)

curl -k -X POST "https://10.0.0.0/aspera/faspex/auth/oauth2/token?grant_type=refresh_token&refresh_token=QNWjnuWucMCt_Mc7Uho_6A"
{"access_token":"6AGXWSBz5TMdxu00irq7hg","token_type":"bearer","refresh_token":"c88hRBlBWBoGkJUdf0Iqqg","expires_in":86400}

As you can see in the example above, the request to refresh a token with the refresh_token parameter generates a new access token and a new refresh token value for future requests.

Generating an OAuth Token for a SAML User

To use the Faspex v4 API with a SAML user, you need to generate an OAuth token. First you must capture the SAML response, then you pass in the SAML response in string form.

I. Capturing a SAML Response

  1. Download SAML tracer for Firefox.
  2. Open SAML tracer (Tools > SAML tracer)
  3. Log into Faspex in the SAML login page.
  4. In the SAML Tracer dialog, click the POST request that contains the segment /auth/saml/callback in the URL (it will also be marked with a "SAML" label).
  5. Click the Parameters > SAML tab and copy the string under SAMLResponse.

II. Passing the SAML Response

  1. Copy and paste the SAML response (the "assertion") that you captured in Part (I) into a file that's in a form of a POST request (see the sample below).
  2. Run a cURL command to generate the token. Here is one example:
    curl -k -H "Content-type: application/json" -H "Accept:application/json" "https://10.0.153.31/aspera/faspex/auth/oauth2/token" --data @dyang_saml_assertion.txt

Note: The SAML assertion expires about 5 minutes after creation, so you must run this command soon after retrieving the assertion.

Sample assertion file:

{
"grant_type": "urn:ietf:params:oauth:grant-type:saml2-bearer",
"id": 1,
"assertion": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNhbWwycDpSZXNwb25zZSBEZXN0aW5hdGlvbj0iaHR0cHM6Ly8xMC4wLjE1My4zMS9hc3BlcmEvZmFzcGV4L2F1dGgvc2FtbC9jYWxsYmFjaz9pZD0xIiBJRD0iXzU1NGFkMTc5YzgwNTY1NDIwYmE1NWNiNjM3MGQwNTNjIiBJblJlc3BvbnNlVG89Il81YTgwZGQzMC05M2NmLTAxMzQtZDdmYi0wMDUwNTY4Mjc0YWIiIElzc3VlSW5zdGFudD0iMjAxNi0xMS0yM1QxNzoyMjo0Ni41NjlaIiBWZXJzaW9uPSIyLjAiIHhtbG5zOnNhbWwycD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj48c2FtbDI6SXNzdWVyIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6ZW50aXR5IiB4bWxuczpzYW1sMj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI+aHR0cHM6Ly9zaGliLWlkcC0wMS5kZXYuYXNwZXJhLnVzL2lkcC9zaGliYm9sZXRoPC9zYW1sMjpJc3N1ZXI+PHNhbWwycDpTdGF0dXM+PHNhbWwycDpTdGF0dXNDb2RlIFZhbHVlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlN1Y2Nlc3MiLz48L3NhbWwycDpTdGF0dXM+PHNhbWwyOkFzc2VydGlvbiBJRD0iX2E4YTBhOTJmZWM3OTFlYmExZmJkNDk5YzdhYjYyOGUxIiBJc3N1ZUluc3RhbnQ9IjIwMTYtMTEtMjNUMTc6MjI6NDYuNTY5WiIgVmVyc2lvbj0iMi4wIiB4bWxuczpzYW1sMj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj48c2FtbDI6SXNzdWVyIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6ZW50aXR5Ij5odHRwczovL3NoaWItaWRwLTAxLmRldi5hc3BlcmEudXMvaWRwL3NoaWJib2xldGg8L3NhbWwyOklzc3Vlcj48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjcnNhLXNoYTEiLz48ZHM6UmVmZXJlbmNlIFVSST0iI19hOGEwYTkyZmVjNzkxZWJhMWZiZDQ5OWM3YWI2MjhlMSI+PGRzOlRyYW5zZm9ybXM+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyI+PGVjOkluY2x1c2l2ZU5hbWVzcGFjZXMgUHJlZml4TGlzdD0ieHMiIHhtbG5zOmVjPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybT48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8+PGRzOkRpZ2VzdFZhbHVlPjdGcHpMVXJoL3FKcHRMM2dqS0RYSXdGcThnVT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWU+QkhSQVZFNDlwUmVlNXN1cjhmdHV6UUp5MHRRTVpPSkFhbFR2MnpKTUQyOG1yeDJCcHNGUzNVTkxQdURhNE9LTkxDamxqbWVWK1g5SitsdFRkdnZ4N2h2MkN1cWZYL1FINW0xajFjWFFSeU0xZDFqcyttb0NSVVFqQThHSHZ3YXgxektTcEZlR0hSVlIwVVhlcVdoaGliRi9mOUlEVHN6TVQ4aTdaS1VYaDA0WmdaaGNzTTF4VVBZWGtydE5yNzVUd0RZY0FQUDk4empoL0Z5RFVQMk9xV21qaHVJWkhkWnFWbCt3RERzWGZDQ2htaitDZVVqbEl1VlJGU3dmNE50TC9LOUdWRWFVZm1KQkZJbUtqWWl6T2pzU3p3bzVVWThOcWRLVmRWZCtVM20zQnlhL0NoTVlmbkIrL09vVzRCd2pHbE1VTTJWMWJLT0xjcTV2MzBneG1BPT08L2RzOlNpZ25hdHVyZVZhbHVlPjxkczpLZXlJbmZvPjxkczpYNTA5RGF0YT48ZHM6WDUwOUNlcnRpZmljYXRlPk1JSURVRENDQWppZ0F3SUJBZ0lWQU5rWVZPMUxCQjZNdVZpQmloQ0RFQ3E4WG9BeE1BMEdDU3FHU0liM0RRRUJCUVVBTUNReElqQWcKQmdOVkJBTVRHWE5vYVdJdGFXUndMVEF4TG1SbGRpNWhjM0JsY21FdWRYTXdIaGNOTVRNeE1UQTJNakl6T0RBeldoY05Nek14TVRBMgpNakl6T0RBeldqQWtNU0l3SUFZRFZRUURFeGx6YUdsaUxXbGtjQzB3TVM1a1pYWXVZWE53WlhKaExuVnpNSUlCSWpBTkJna3Foa2lHCjl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFrazdlNVZyVEpwY21lUVRiTlFYbGdCVGdwZVdra2h4Kzh0NHpwRWg0VWJRcjhzWGgKc285R3REUWpWaGFzV01mR1BBTytNbHAxMTJlWFZ2VDh1UVFNQmgyQ2U3cVN4MWFYbDRac0p3K21QZnVSZjZ4SVpEazVzVk5mWTgwMQpTeFhiZVZ2UFNHWE42bFRQVjcvMC9kZDRzK0lNSWVHNk5mSWRmcEZiWWE0RjJRYUpEMjhlcmdmM0tFTHpIa3JCV3RpNTVOSDhOcDQ5CnJrNUlxMGZrNTZZUjFLdUVUSEkycFMzdnZWSU9KTXdJaE92T3JzTnhIdTBPNm9vaEZtTE01ayt5SFFxdXIxTGswbVY5R0ZabndEV0MKbHdQY0xLdko2Z1R2OGs0aFVrSTBmaFdVVk9FTmNsZXl5RGM5YWNuTVhDcm5NNDI0ZVc0UW5LRTFIOHU4eE82RGN3SURBUUFCbzNrdwpkekJXQmdOVkhSRUVUekJOZ2hsemFHbGlMV2xrY0Mwd01TNWtaWFl1WVhOd1pYSmhMblZ6aGpCb2RIUndjem92TDNOb2FXSXRhV1J3CkxUQXhMbVJsZGk1aGMzQmxjbUV1ZFhNdmFXUndMM05vYVdKaWIyeGxkR2d3SFFZRFZSME9CQllFRlBacTI1cmZ0MFdLKzlXdkwrV2wKK1cra25LSDJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUFoQ0lDdUFMa2FMVzFnbERWdHA4WXVZQjNGWnFCbjBZM2VrdC9PVVhJVQp1R3dYRFloUjhGZHVtWGhHSUdkVWFQbFFIZDNNblpSSVZvdWd5N2ZTL1F5ZzhWL0M4QUxhNWc3Sy8yc1RPaS9SdE1qUlFaSyt2T2xPCm94bmVxb3RrNEJQR3AzYW4rbTFwZG54akp2cGhMNGtYL1pQdUNjdmt5em9EbmVsdi9jK2RFLytZejZJem1MMWovZHJzeFJMOGV0UGMKanBnR2pJRjRUREdUTkREaGxlT3lMUDN5TjJhTlBxRXBGL1k4V09WaGVqcmt1eDJZS3dINlNRVktkU2dvZEQ2RVZzVXMxM0YxYXR2QgpCUlJ3QldnRzJsRkJuVlJsMDFyM0xPakgwVnRGSy9IbXMzVjNMOWpFN3VjUitxRGJXTmRQRW1Wd0JZMmFIcjBFUVUvTnNjUWw8L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48c2FtbDI6U3ViamVjdD48c2FtbDI6TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiIE5hbWVRdWFsaWZpZXI9Imh0dHBzOi8vc2hpYi1pZHAtMDEuZGV2LmFzcGVyYS51cy9pZHAvc2hpYmJvbGV0aCIgU1BOYW1lUXVhbGlmaWVyPSJodHRwczovLzEwLjAuMTUzLjMxL2FzcGVyYS9mYXNwZXgvYXV0aC9zYW1sL21ldGFkYXRhLzEiPmR5YW5nPC9zYW1sMjpOYW1lSUQ+PHNhbWwyOlN1YmplY3RDb25maXJtYXRpb24gTWV0aG9kPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6Y206YmVhcmVyIj48c2FtbDI6U3ViamVjdENvbmZpcm1hdGlvbkRhdGEgQWRkcmVzcz0iMTAuNDEuNDEuMTcwIiBJblJlc3BvbnNlVG89Il81YTgwZGQzMC05M2NmLTAxMzQtZDdmYi0wMDUwNTY4Mjc0YWIiIE5vdE9uT3JBZnRlcj0iMjAxNi0xMS0yM1QxNzoyNzo0Ni41NjlaIiBSZWNpcGllbnQ9Imh0dHBzOi8vMTAuMC4xNTMuMzEvYXNwZXJhL2Zhc3BleC9hdXRoL3NhbWwvY2FsbGJhY2s/aWQ9MSIvPjwvc2FtbDI6U3ViamVjdENvbmZpcm1hdGlvbj48L3NhbWwyOlN1YmplY3Q+PHNhbWwyOkNvbmRpdGlvbnMgTm90QmVmb3JlPSIyMDE2LTExLTIzVDE3OjIyOjQ2LjU2OVoiIE5vdE9uT3JBZnRlcj0iMjAxNi0xMS0yM1QxNzoyNzo0Ni41NjlaIj48c2FtbDI6QXVkaWVuY2VSZXN0cmljdGlvbj48c2FtbDI6QXVkaWVuY2U+aHR0cHM6Ly8xMC4wLjE1My4zMS9hc3BlcmEvZmFzcGV4L2F1dGgvc2FtbC9tZXRhZGF0YS8xPC9zYW1sMjpBdWRpZW5jZT48L3NhbWwyOkF1ZGllbmNlUmVzdHJpY3Rpb24+PC9zYW1sMjpDb25kaXRpb25zPjxzYW1sMjpBdXRoblN0YXRlbWVudCBBdXRobkluc3RhbnQ9IjIwMTYtMTEtMjNUMTc6MjI6NDYuNDczWiIgU2Vzc2lvbkluZGV4PSJfYWZmMjhlNWMyZjkzYjIxZGFjZmE4YmVlZWUxNzU5M2MiPjxzYW1sMjpTdWJqZWN0TG9jYWxpdHkgQWRkcmVzcz0iMTAuNDEuNDEuMTcwIi8+PHNhbWwyOkF1dGhuQ29udGV4dD48c2FtbDI6QXV0aG5Db250ZXh0Q2xhc3NSZWY+dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmRQcm90ZWN0ZWRUcmFuc3BvcnQ8L3NhbWwyOkF1dGhuQ29udGV4dENsYXNzUmVmPjwvc2FtbDI6QXV0aG5Db250ZXh0Pjwvc2FtbDI6QXV0aG5TdGF0ZW1lbnQ+PHNhbWwyOkF0dHJpYnV0ZVN0YXRlbWVudD48c2FtbDI6QXR0cmlidXRlIEZyaWVuZGx5TmFtZT0ib2ZmaWNlIiBOYW1lPSJvZmZpY2UiIE5hbWVGb3JtYXQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphdHRybmFtZS1mb3JtYXQ6dW5zcGVjaWZpZWQiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5FbWVyeXZpbGxlPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIEZyaWVuZGx5TmFtZT0ic24iIE5hbWU9InN1cm5hbWUiIE5hbWVGb3JtYXQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphdHRybmFtZS1mb3JtYXQ6dW5zcGVjaWZpZWQiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj55YW5nPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIEZyaWVuZGx5TmFtZT0iY29tcGFueV9uYW1lIiBOYW1lPSJjb21wYW55X25hbWUiIE5hbWVGb3JtYXQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphdHRybmFtZS1mb3JtYXQ6dW5zcGVjaWZpZWQiPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5Bc3BlcmEtVGVzdC1TaGliPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIEZyaWVuZGx5TmFtZT0iZW1haWwiIE5hbWU9ImVtYWlsIiBOYW1lRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OnVuc3BlY2lmaWVkIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+ZHlhbmcuYXNwZXJhK3dpbjIwMDhBREBnbWFpbC5jb208L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjxzYW1sMjpBdHRyaWJ1dGUgRnJpZW5kbHlOYW1lPSJlbnRyeUROIiBOYW1lPSJpZCIgTmFtZUZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmF0dHJuYW1lLWZvcm1hdDp1bnNwZWNpZmllZCI+PHNhbWwyOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPkNOPWR5YW5nLE9VPWR5YW5nIHRlc3QsT1U9VXNlcnMsT1U9QXNwZXJhc29mdCxEQz1kZXYsREM9YXNwZXJhLERDPXVzPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48L3NhbWwyOkF0dHJpYnV0ZT48c2FtbDI6QXR0cmlidXRlIEZyaWVuZGx5TmFtZT0iZ2l2ZW5OYW1lIiBOYW1lPSJnaXZlbl9uYW1lIiBOYW1lRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OnVuc3BlY2lmaWVkIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+ZHlhbmc8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjxzYW1sMjpBdHRyaWJ1dGUgRnJpZW5kbHlOYW1lPSJtZW1iZXJPZiIgTmFtZT0ibWVtYmVyX29mIiBOYW1lRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OnVuc3BlY2lmaWVkIj48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+Q049ZHlhbmcgU0FNTCBncm91cCAzLE9VPWR5YW5nIHRlc3QsT1U9VXNlcnMsT1U9QXNwZXJhc29mdCxEQz1kZXYsREM9YXNwZXJhLERDPXVzPC9zYW1sMjpBdHRyaWJ1dGVWYWx1ZT48c2FtbDI6QXR0cmlidXRlVmFsdWUgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+Q049ZHlhbmdfZXh0ZXJuYWxfdXNlcnNfZ3JvdXAsT1U9ZHlhbmcgdGVzdCxPVT1Vc2VycyxPVT1Bc3BlcmFzb2Z0LERDPWRldixEQz1hc3BlcmEsREM9dXM8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjxzYW1sMjpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6dHlwZT0ieHM6c3RyaW5nIj5DTj1keWFuZyBTQU1MIGdyb3VwIDIsT1U9ZHlhbmcgdGVzdCxPVT1Vc2VycyxPVT1Bc3BlcmFzb2Z0LERDPWRldixEQz1hc3BlcmEsREM9dXM8L3NhbWwyOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDI6QXR0cmlidXRlPjwvc2FtbDI6QXR0cmlidXRlU3RhdGVtZW50Pjwvc2FtbDI6QXNzZXJ0aW9uPjwvc2FtbDJwOlJlc3BvbnNlPg==" 
}

Video player

Video

×