Orders updates
|
@ -0,0 +1,171 @@
|
||||||
|
# Orders
|
||||||
|
|
||||||
|
**Orders** is a web application written in [React.js](https://reactjs.org) and [Node.js](https://nodejs.org) that, backed by the power of the [MariaDB Node.js Connector](https://github.com/MariaDB/mariadb-connector-nodejs), introduces you to the power, performance, and simplicity of [MariaDB](https://mariadb.com/resources/blog/deploying-mariadb-platform-x4/#smart).
|
||||||
|
|
||||||
|
<p align="center" spacing="10">
|
||||||
|
<kbd>
|
||||||
|
<img src="media/demo.gif" />
|
||||||
|
</kbd>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
The following will walk you through the steps for getting this application up and running (locally) within minutes! This application is completely open source. Please feel free to use it and the source code as you see fit!
|
||||||
|
|
||||||
|
# Table of Contents
|
||||||
|
1. [Environment and Compatibility](#compatibility)
|
||||||
|
2. [Getting start with MariaDB](#overview)
|
||||||
|
1. [The Basics](#intro-mariadb)
|
||||||
|
2. [Create the schema](#create-schema)
|
||||||
|
3. [Requirements to run the app](#requirements)
|
||||||
|
4. [Getting started with the app](#getting-started)
|
||||||
|
1. [Grab the code](#grab-code)
|
||||||
|
2. [Build the code](#build-code)
|
||||||
|
3. [Run the app](#run-app)
|
||||||
|
5. [Support and Contribution](#support-contribution)
|
||||||
|
6. [License](#license)
|
||||||
|
|
||||||
|
## Environment and Compatibility <a name="compatibility"></a>
|
||||||
|
|
||||||
|
This sample was created using the following techologies:
|
||||||
|
|
||||||
|
* [MariaDB Platform](https://mariadb.com/products/)
|
||||||
|
* [React.js (v.16.12.0)](https://github.com/facebook/react/blob/master/CHANGELOG.md#16120-november-14-2019)
|
||||||
|
* [Node.js (v.12.x)](https://nodejs.org/docs/latest-v12.x/api/index.html)
|
||||||
|
* [NPM (v.6.11.3)](https://docs.npmjs.com/)
|
||||||
|
|
||||||
|
This sample was tested on macOS v.10.14.6.
|
||||||
|
|
||||||
|
## Overview <a name="overview"></a>
|
||||||
|
|
||||||
|
### Introduction to MariaDB <a name="intro-mariadb"></a>
|
||||||
|
|
||||||
|
[MariaDB platform](https://mariadb.com/products/mariadb-platform/) unifies [MariaDB TX (transactions)](https://mariadb.com/products/mariadb-platform-transactional/) and [MariaDB AX (analytics)](https://mariadb.com/products/mariadb-platform-analytical/) so transactional applications can retain unlimited historical data and leverage powerful, real-time analytics in order to provide data-driven customers with more information, actionable insight and greater value – and businesses with endless ways to monetize data. It is the enterprise open source database for hybrid transactional/analytical processing at scale.
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<kdb>
|
||||||
|
<img src="media/platform.png" />
|
||||||
|
</kbd>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
### Getting start with MariaDB <a name="installation"></a>
|
||||||
|
|
||||||
|
To download and deploy MariaDB HTAP check out the instructions [here](https://mariadb.com/docs/deploy/installation/). You can also make use of the [MariaDB Image available on Docker Hub](https://hub.docker.com/_/mariadb).
|
||||||
|
|
||||||
|
### Create the schema <a name="create-schema"></a>
|
||||||
|
|
||||||
|
Next you can create the schema necessary for this application by running
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ./create_schema.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
or executing the SQL within (create.sql)(schema/create.sql) directly
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE DATABASE `orders`;
|
||||||
|
|
||||||
|
CREATE TABLE `orders` (
|
||||||
|
`description` varchar(100) NOT NULL DEFAULT ''
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements to run the app <a name="requirements"></a>
|
||||||
|
|
||||||
|
This project assumes you have familiarity with building web applications using [ReactJS](https://reactjs.org) and [NodeJS](https://nodejs.org) technologies.
|
||||||
|
|
||||||
|
The following is required to run this application:
|
||||||
|
|
||||||
|
1. [Download and install MariaDB](#installation).
|
||||||
|
2. [Download and install Node.js](https://nodejs.org/en/download/).
|
||||||
|
3. git (Optional) - this is required if you would prefer to pull the source code from GitHub repo.
|
||||||
|
- Create a [free github account](https://github.com/) if you don’t already have one
|
||||||
|
- git can be downloaded from git-scm.org
|
||||||
|
|
||||||
|
## Getting started with the app <a name="getting-started"></a>
|
||||||
|
|
||||||
|
### Grab the code <a name="grab-code"></a>
|
||||||
|
|
||||||
|
Download this code directly or use [git](git-scm.org) (through CLI or a client) to retrieve the code.
|
||||||
|
|
||||||
|
### Configure the code <a name="configure-code"></a>
|
||||||
|
|
||||||
|
Configure the MariaDB connection by [adding an .env file to the Node.js project](https://github.com/mariadb-corporation/mariadb-connector-nodejs/blob/master/documentation/promise-api.md#security-consideration).
|
||||||
|
|
||||||
|
Example implementation:
|
||||||
|
|
||||||
|
```
|
||||||
|
DB_HOST=<host_address>
|
||||||
|
DB_PORT=<port_number>
|
||||||
|
DB_USER=<username>
|
||||||
|
DB_PASS=<password>
|
||||||
|
DB_NAME=<database>
|
||||||
|
```
|
||||||
|
|
||||||
|
The environmental variables from `.env` are used within the [db.js](src/db.js) for the MariaDB Node.js Connector configuration pool settings:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var mariadb = require('mariadb');
|
||||||
|
require('dotenv').config();
|
||||||
|
|
||||||
|
const pool = mariadb.createPool({
|
||||||
|
host: process.env.DB_HOST,
|
||||||
|
user: process.env.DB_USER,
|
||||||
|
password: process.env.DB_PASS,
|
||||||
|
port: process.env.DB_PORT,
|
||||||
|
multipleStatements: true,
|
||||||
|
connectionLimit: 5
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build the code <a name="build-code"></a>
|
||||||
|
|
||||||
|
Once you have retrieved a copy of the code you're ready to build and run the project! However, before running the code it's important to point out that the application uses several Node Packages.
|
||||||
|
|
||||||
|
Executing the CLI command
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
within
|
||||||
|
|
||||||
|
* [src](src): the Node.js project
|
||||||
|
* [client](src/client): the React.js project
|
||||||
|
|
||||||
|
folders will target the the relative `package.json` file and [install all dependencies](https://docs.npmjs.com/downloading-and-installing-packages-locally).
|
||||||
|
|
||||||
|
### Run the app <a name="run-app"></a>
|
||||||
|
|
||||||
|
Once you've pulled down the code and have verified that all of the required Node packages are installed you're ready to run the application! It's as easy as 1,2,3.
|
||||||
|
|
||||||
|
1. Using a command line interface (CLI) navigate to the [src](src) directory.
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="media/cli_root.png" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
2. Run the command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="media/npm_start.png" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
3. Open a browser window and navigate to http://localhost:3000.
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<kbd>
|
||||||
|
<img src="media/get_started.png" />
|
||||||
|
</kbd>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
## Support and Contribution <a name="support-contribution"></a>
|
||||||
|
|
||||||
|
Thanks so much for taking a look at the Bookings app! As this is a very simple example, there's plenty of potential for customization. Please feel free to submit PR's to the project to include your modifications!
|
||||||
|
|
||||||
|
If you have any questions, comments, or would like to contribute to this or future projects like this please reach out to us directly at developers@mariadb.com or on [Twitter](https://twitter.com/mariadb).
|
||||||
|
|
||||||
|
## License <a name="license"></a>
|
||||||
|
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=plastic)](https://opensource.org/licenses/Apache-2.0)
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SCHEMA_DIR=$(readlink -f ./schema)
|
||||||
|
|
||||||
|
# create orders database and table
|
||||||
|
/usr/bin/mysql --defaults-file=/etc/my.cnf -u root -vvv < $SCHEMA_DIR/create.sql
|
Po Szerokość: | Wysokość: | Rozmiar: 43 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 880 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 103 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 236 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 233 KiB |
|
@ -0,0 +1,5 @@
|
||||||
|
CREATE DATABASE `orders`;
|
||||||
|
|
||||||
|
CREATE TABLE `orders` (
|
||||||
|
`description` varchar(100) NOT NULL DEFAULT ''
|
||||||
|
) ENGINE=InnoDB;
|
Przed Szerokość: | Wysokość: | Rozmiar: 3.8 KiB Po Szerokość: | Wysokość: | Rozmiar: 15 KiB |
|
@ -24,7 +24,7 @@
|
||||||
work correctly both with client-side routing and a non-root public URL.
|
work correctly both with client-side routing and a non-root public URL.
|
||||||
Learn how to configure a non-root public URL by running `npm run build`.
|
Learn how to configure a non-root public URL by running `npm run build`.
|
||||||
-->
|
-->
|
||||||
<title>React App</title>
|
<title>Orders</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
|
|
|
@ -1,23 +1,20 @@
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
var mariadb = require('mariadb');
|
var mariadb = require('mariadb');
|
||||||
|
require('dotenv').config();
|
||||||
|
|
||||||
// Place a .pem file within the project root to use this line
|
// For SSL connections
|
||||||
//const serverCert = [fs.readFileSync("skysql_chain.pem", "utf8")];
|
//const serverCert = [fs.readFileSync("skysql_chain.pem", "utf8")];
|
||||||
|
|
||||||
var pools = [
|
var pools = [
|
||||||
mariadb.createPool({
|
mariadb.createPool({
|
||||||
host: '<host_address>',
|
host: process.env.DB_HOST_1,
|
||||||
user:'<user>',
|
user: process.env.DB_USER_1,
|
||||||
password: '<password>',
|
password: process.env.DB_PASS_1,
|
||||||
database: 'orders',
|
port: process.env.DB_PORT_1,
|
||||||
port: 5001,
|
database: process.env.DB_NAME_1,
|
||||||
multipleStatements: true,
|
multipleStatements: true,
|
||||||
connectionLimit: 5,
|
connectionLimit: 5
|
||||||
ssl: {
|
})/*,
|
||||||
//ca: serverCert
|
|
||||||
rejectUnauthorized: false
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
mariadb.createPool({
|
mariadb.createPool({
|
||||||
host: '<host_address>',
|
host: '<host_address>',
|
||||||
user:'<user>',
|
user:'<user>',
|
||||||
|
@ -27,33 +24,19 @@ var pools = [
|
||||||
multipleStatements: true,
|
multipleStatements: true,
|
||||||
connectionLimit: 5,
|
connectionLimit: 5,
|
||||||
ssl: {
|
ssl: {
|
||||||
//ca: serverCert
|
ca: serverCert
|
||||||
rejectUnauthorized: false
|
|
||||||
}
|
}
|
||||||
}),
|
})*/
|
||||||
mariadb.createPool({
|
|
||||||
host: '<host_address>',
|
|
||||||
user:'<user>',
|
|
||||||
password: '<password>',
|
|
||||||
database: 'orders',
|
|
||||||
port: 5003,
|
|
||||||
multipleStatements: true,
|
|
||||||
connectionLimit: 5,
|
|
||||||
ssl: {
|
|
||||||
//ca: serverCert
|
|
||||||
rejectUnauthorized: false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
];
|
];
|
||||||
|
|
||||||
module.exports={
|
module.exports={
|
||||||
getConnection: function(config_id){
|
getConnection: function(config_id){
|
||||||
return new Promise(function(resolve,reject){
|
return new Promise(function(resolve,reject){
|
||||||
pools[config_id].getConnection().then(function(connection){
|
pools[config_id].getConnection().then(function(connection){
|
||||||
resolve(connection);
|
resolve(connection);
|
||||||
}).catch(function(error){
|
}).catch(function(error){
|
||||||
reject(error);
|
reject(error);
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
}
|
|
@ -10,9 +10,9 @@
|
||||||
"integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ=="
|
"integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ=="
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "12.12.22",
|
"version": "13.1.8",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.22.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.8.tgz",
|
||||||
"integrity": "sha512-r5i93jqbPWGXYXxianGATOxTelkp6ih/U0WVnvaqAvTqM+0U6J3kw6Xk6uq/dWNRkEVw/0SLcO5ORXbVNz4FMQ=="
|
"integrity": "sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A=="
|
||||||
},
|
},
|
||||||
"accepts": {
|
"accepts": {
|
||||||
"version": "1.3.7",
|
"version": "1.3.7",
|
||||||
|
@ -183,6 +183,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
||||||
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
||||||
},
|
},
|
||||||
|
"dotenv": {
|
||||||
|
"version": "8.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
|
||||||
|
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
|
||||||
|
},
|
||||||
"ee-first": {
|
"ee-first": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||||
|
@ -370,12 +375,12 @@
|
||||||
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
||||||
},
|
},
|
||||||
"mariadb": {
|
"mariadb": {
|
||||||
"version": "2.1.4",
|
"version": "2.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.1.5.tgz",
|
||||||
"integrity": "sha512-CMLbIKZCzxero94luo25IKpboEuUCvA2g2+NMUBdRYpBCDmnsiQ8kwdgqvuVQ13a4/ZKr87BC1nbe4b3UZXXmQ==",
|
"integrity": "sha512-uRHtjc0bg+Rt91LvIaZNo8tLcYs9YPiiW9Mke/BavFzg0MnctJBDkqZW9X59NyrRGDd7Oz9UshTWgmUpfDZc0Q==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/geojson": "^7946.0.7",
|
"@types/geojson": "^7946.0.7",
|
||||||
"@types/node": "^12.12.11",
|
"@types/node": "^13.1.4",
|
||||||
"denque": "^1.4.1",
|
"denque": "^1.4.1",
|
||||||
"iconv-lite": "^0.5.0",
|
"iconv-lite": "^0.5.0",
|
||||||
"long": "^4.0.0",
|
"long": "^4.0.0",
|
||||||
|
@ -383,9 +388,9 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"iconv-lite": {
|
"iconv-lite": {
|
||||||
"version": "0.5.0",
|
"version": "0.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz",
|
||||||
"integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==",
|
"integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"safer-buffer": ">= 2.1.2 < 3"
|
"safer-buffer": ">= 2.1.2 < 3"
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,8 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"concurrently": "^5.0.2",
|
"concurrently": "^5.0.2",
|
||||||
|
"dotenv": "^8.2.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"mariadb": "^2.1.4"
|
"mariadb": "^2.1.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,37 +6,44 @@ let express = require("express"),
|
||||||
|
|
||||||
// GET
|
// GET
|
||||||
router.get("/", async (req, res, next) => {
|
router.get("/", async (req, res, next) => {
|
||||||
let connection_id = req.query.c;
|
// Set the query string parameters
|
||||||
let read_count = req.query.r;
|
let read_count = req.query.r;
|
||||||
let write_count = req.query.w;
|
let write_count = req.query.w;
|
||||||
|
let connection_id = req.query.c;
|
||||||
let conn;
|
let conn;
|
||||||
try {
|
try {
|
||||||
|
// Establish connection to SkySQL using the db.js module
|
||||||
conn = await pool.getConnection(connection_id);
|
conn = await pool.getConnection(connection_id);
|
||||||
|
|
||||||
let reads = "";
|
let reads = "";
|
||||||
let writes = "";
|
let writes = "";
|
||||||
|
|
||||||
// reads
|
// Create 0-N read queries
|
||||||
for (let i = 0; i < read_count; i++) {
|
for (let i = 0; i < read_count; i++) {
|
||||||
reads += "select * from orders limit 1;";
|
reads += "select * from orders limit 1;";
|
||||||
}
|
}
|
||||||
|
|
||||||
// writes
|
// Create 0-N write queries
|
||||||
let transaction_id = Date.now().toString();
|
let transaction_id = Date.now().toString();
|
||||||
for (let i = 0; i < write_count; i++) {
|
for (let i = 0; i < write_count; i++) {
|
||||||
writes += "insert into orders (description) values('order - " + transaction_id + "');";
|
writes += "insert into orders (description) values('order - " + transaction_id + "');";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Start latency timer
|
||||||
var start = Date.now();
|
var start = Date.now();
|
||||||
|
|
||||||
|
// Asynchronously execute read and write queries
|
||||||
await Promise.all([conn.query(reads), conn.query(writes)]);
|
await Promise.all([conn.query(reads), conn.query(writes)]);
|
||||||
|
|
||||||
|
// Calculate latency
|
||||||
var delta = Date.now() - start;
|
var delta = Date.now() - start;
|
||||||
|
|
||||||
|
// Return the results
|
||||||
res.send({ execution_time: delta });
|
res.send({ execution_time: delta });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw err;
|
throw err;
|
||||||
} finally {
|
} finally {
|
||||||
|
// Release (close) the connection
|
||||||
if (conn) return conn.release();
|
if (conn) return conn.release();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIELzCCAxegAwIBAgIUNz1kWFjbLVDWVCBnEAsf95UPMS8wDQYJKoZIhvcNAQEL
|
||||||
|
BQAwQTEQMA4GA1UEChMHTWFyaWFEQjEPMA0GA1UECxMGU2t5U1FMMRwwGgYDVQQD
|
||||||
|
ExNyb290LXBraS5za3lzcWwubmV0MB4XDTE5MDkwNTE4MjMxMVoXDTI5MDkwMjE4
|
||||||
|
MjM0MFowQTEQMA4GA1UEChMHTWFyaWFEQjEPMA0GA1UECxMGU2t5U1FMMRwwGgYD
|
||||||
|
VQQDExNyb290LXBraS5za3lzcWwubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
||||||
|
MIIBCgKCAQEA0orsl93gB0MZuiby/4QmcmK2OrS/hEcDI/AN+Dpn9c3JKeEVp2OD
|
||||||
|
sft47OHGwdgyagBtNV6zZgOc6IOnwt+rGDmrmiuxHkf/XWV+y66skWAtMyM7ycCL
|
||||||
|
J3z5dO6xaZvYKJyhPcnx2NROEAJrkdVfoyJCtCElDDdRrknXWLPfZrph8E7I2mDP
|
||||||
|
SV8ZF4wdxbU7oHKM4CoTRgXQnCDq2Wv8OLZr4Mq224nSmEJK+cXRwKqbFUvuiSco
|
||||||
|
bTBnJjyeKldqJ/lCRwu9fU6fBHFuBNUEvZBzavt0B8SYi/l22wYHxlpOslowTaG4
|
||||||
|
Lh8Nj79PP7rsy44hHvOBGc/ZsKIGCDOIMwIDAQABo4IBHTCCARkwDgYDVR0PAQH/
|
||||||
|
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHAIHx8QSWENuYb/xmuh
|
||||||
|
17S2nnXWMB8GA1UdIwQYMBaAFHAIHx8QSWENuYb/xmuh17S2nnXWMEAGCCsGAQUF
|
||||||
|
BwEBBDQwMjAwBggrBgEFBQcwAoYkaHR0cDovLzEyNy4wLjAuMTo4MjAwL3YxL3Br
|
||||||
|
aV9yb290L2NhMB4GA1UdEQQXMBWCE3Jvb3QtcGtpLnNreXNxbC5uZXQwHAYDVR0e
|
||||||
|
AQH/BBIwEKAOMAyCCnNreXNxbC5uZXQwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDov
|
||||||
|
LzEyNy4wLjAuMTo4MjAwL3YxL3BraV9yb290L2NybDANBgkqhkiG9w0BAQsFAAOC
|
||||||
|
AQEAfwo8ZW666UjHJ4DY+M9tDgRwFwFd7v3EBhLrGvkD+CWaiJIS9RnWwE0gn9SU
|
||||||
|
syBvRn3PrjsveCR3cIjqAzUplOyMMvvJ77E8rzfQEwOhHbATyKNQG32KaitCdEBP
|
||||||
|
v0XDb7SBw2eKQxdahMcT5yxh9DkCizTXE8usZIiW+V9FVcEPPNia4d9ZMlmLWMcP
|
||||||
|
pZlxE4W5ngU6iCN7PJ3aeKrk4Y1PM36XJ11f5pouMULUvqbjepa/R1KJt27OSbrJ
|
||||||
|
RjHDa+s0AljgPZDl7KqQOOA5hrNT1Om+5IVs+uAbY7mWQC2GwYlFsg5laqWf7SC0
|
||||||
|
hPvVLDb8GaRK6LA4PCROZwiM9g==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIID4jCCAsqgAwIBAgIUB9abD+hn9+dtYuqwkA3Rj5ZrPgUwDQYJKoZIhvcNAQEL
|
||||||
|
BQAwQTEQMA4GA1UEChMHTWFyaWFEQjEPMA0GA1UECxMGU2t5U1FMMRwwGgYDVQQD
|
||||||
|
ExNyb290LXBraS5za3lzcWwubmV0MB4XDTE5MDkwNTE4MjMxOFoXDTI5MDkwMjE4
|
||||||
|
MjM0OFowGTEXMBUGA1UEAxMOcGtpLnNreXNxbC5uZXQwggEiMA0GCSqGSIb3DQEB
|
||||||
|
AQUAA4IBDwAwggEKAoIBAQDYov+F2ijXdIiZ0AuX4fAJ6KQ16zb4mQ2qgsrO02yW
|
||||||
|
kF3EJV6/XQO0WqGok4SjcvLBLuSsQBFahtgB70d/YZ+PBUrwzzmgWa3Ga+GuzKl6
|
||||||
|
O2QI8vu7l8D0esJe7mY4KsAwNIvMUAdqUUCgB01KmCIwWoVqN1h65dX1qOf1N6qk
|
||||||
|
f+rXeFKBGoDq/DM6zR90irpYBt2guE5iZd5r63JMXANlmh44IWxEswBqAa4B+GlY
|
||||||
|
7m7Psk9E+i4rexN45+815SLnHr86y3PNUlFfzgfQwXCLVPqSPGfNzyEz8MZUVYQv
|
||||||
|
zg+hZmrTe9nCekMi3hk97Dh1x40Y1rSTtbQjUu2SvJepAgMBAAGjgfkwgfYwDgYD
|
||||||
|
VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLwrAxEtsiHF
|
||||||
|
Oz/dRW65RxwIHHVmMB8GA1UdIwQYMBaAFHAIHx8QSWENuYb/xmuh17S2nnXWMEAG
|
||||||
|
CCsGAQUFBwEBBDQwMjAwBggrBgEFBQcwAoYkaHR0cDovLzEyNy4wLjAuMTo4MjAw
|
||||||
|
L3YxL3BraV9yb290L2NhMBkGA1UdEQQSMBCCDnBraS5za3lzcWwubmV0MDYGA1Ud
|
||||||
|
HwQvMC0wK6ApoCeGJWh0dHA6Ly8xMjcuMC4wLjE6ODIwMC92MS9wa2lfcm9vdC9j
|
||||||
|
cmwwDQYJKoZIhvcNAQELBQADggEBAAZZKyFT+mVwuafkBOBYqXb/dCPdqbUnGBic
|
||||||
|
E2dRK0sxKYbeq7I3lo95UXrtfNBEMY740ZJzUwi6whDUMGNMoV0yFRPHPYvmopC5
|
||||||
|
wCUA62pPuvHEqwo7HSuO3TBmt5x0b2e9R0gJ535GZSTQI+ArseUwn5IJ2v/BUIRJ
|
||||||
|
xjAMwRmM9TOWcK6VLEBZoHXEzENrBLHr0fKhVyJhhuQV+xeEVY28odwzwH85AyUk
|
||||||
|
1lrAIzuz3YCDHtjL449U+hdz/2tytI1KXJscm/mrAhtgUjQnKCY0fFkJESL+TDwX
|
||||||
|
Sdb13rs8ZQvwanpcOt+Kg86O/vz2P5JLC8fK1L4aUilt0X5b8gc=
|
||||||
|
-----END CERTIFICATE-----
|