Compare commits

..

No commits in common. "develop" and "master" have entirely different histories.

91 changed files with 396 additions and 22663 deletions

19080
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,26 +3,14 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"bootstrap": "^4.4.1",
"browser-js": "^1.10.1",
"connected-react-router": "^5.0.1",
"font-awesome": "^4.7.0",
"history": "^4.7.2",
"jquery": "^3.4.1",
"node-sass": "^4.11.0",
"prop-types": "^15.6.2",
"react": "^16.8.0",
"react-bootstrap": "^1.0.0-beta.16",
"react-css-grid": "^2.0.0-0",
"react-dom": "^16.8.0",
"react": "^16.6.3",
"react-dom": "^16.6.3",
"react-redux": "^5.1.1",
"react-router": "^4.3.1",
"react-router-dom": "^4.3.1",
"react-scripts": "^2.1.3",
"react-scripts": "2.1.1",
"redux": "^4.0.1",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.3.0",
"video-react": "^0.13.1",
"whatwg-fetch": "^3.0.0"
},
"scripts": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -19,7 +19,7 @@
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`.
-->
<title>858</title>
<title>React App</title>
</head>
<body>
<noscript>

View File

@ -1,41 +1,19 @@
import React, {Component} from 'react';
import {Provider} from 'react-redux';
import { ConnectedRouter } from 'connected-react-router'
import React, { Component } from 'react';
import { Provider } from 'react-redux';
import './App.css';
import 'font-awesome/css/font-awesome.min.css';
import { Route, Switch } from 'react-router-dom';
import { Route } from 'react-router-dom';
import Home from './containers/Home';
import About from './containers/About';
import TopicsListContainer from './containers/TopicsListContainer';
import TopicsList from './containers/TopicsList';
import store from './store/configureStore';
import history from './history';
import Header from "./components/Header";
import Footer from "./components/Footer";
import Search from "./components/Search";
import Nav from "./components/Nav";
import Video from "./containers/Video";
import Results from "./containers/Results";
class App extends Component {
render() {
return (
<Provider store={store}>
<ConnectedRouter history={ history }>
<div className="App">
<Header/>
<Search/>
<Switch>
<Route exact={true} path="/" component={Home}/>
<Route exact={true} path="/about" component={About}/>
<Route path="/topics" component={TopicsListContainer}/>
<Route path="/results/:categoryKey/:searchValue" component={Results}/>
<Route path="/videos/:videoId" component={Video}/>
</Switch>
<Nav />
<Footer/>
</div>
</ConnectedRouter>
<Provider store={ store }>
<div className="App">
<Route exact={ true } path="/" component={ Home } />
<Route path="/topics" component={ TopicsList } />
</div>
</Provider>
);
}

View File

@ -1,22 +1,3 @@
// Topics Action Types
export const START_LOADING_ALL_TOPICS = 'START_LOADING_ALL_TOPICS';
export const LOADED_ALL_TOPICS = 'LOADED_ALL_TOPICS';
export const START_LOADING_RANDOM_TOPIC = 'START_LOADING_RANDOM_TOPIC';
export const LOADED_RANDOM_TOPIC = 'LOADED_RANDOM_TOPIC';
// Locations/Places
// Places Action Types
export const START_LOADING_ALL_PLACES = 'START_LOADING_ALL_PLACES';
export const LOADED_ALL_PLACES = 'LOADED_ALL_PLACES';
export const START_LOADING_RANDOM_PLACE = 'START_LOADING_RANDOM_PLACE';
export const LOADED_RANDOM_PLACE = 'LOADED_RANDOM_PLACE';
// Videos Action Types
export const ADD_VIDEOS_TO_STATE = 'ADD_VIDEOS_TO_STATE';
export const START_LOADING_VIDEO = 'START_LOADING_VIDEO';
export const LOADED_VIDEO = 'LOADED_VIDEO';
// Search Results Action Types
export const START_LOADING_ALL_RESULTS = 'START_LOADING_ALL_RESULTS';
export const LOADED_ALL_RESULTS = 'LOADED_ALL_RESULTS';
export const TEST_ACTION = 'TEST_ACTION';
export const START_LOADING_VIDEOS = 'START_LOADING_VIDEOS';
export const RECEIVE_VIDEOS = 'RECEIVE_VIDEOS';

View File

@ -1,7 +0,0 @@
export function APIError(error) {
return {
type: 'ERROR',
payload: error
}
}

View File

@ -0,0 +1,49 @@
import config from '../config';
import { START_LOADING_VIDEOS, RECEIVE_VIDEOS } from './action_types';
function fetchVideos() {
console.log('fetchVideos called');
return dispatch => {
console.log('inside dispatch function');
dispatch(startLoadingVideos());
const params = {
"keys":["editable","modified","title","source","project","topic","language","duration","id"],
"query": {
"conditions":[],
"operator":"&"
},
"range":[0,100],
"sort": [{"key":"title","operator":"+"}]
};
let formData = new FormData();
formData.append('action', 'find');
formData.append('data', JSON.stringify(params));
fetch(config.apiUrl, {
method: 'POST',
// headers: {
// "Content-Type": "application/x-www-form-urlencoded"
// },
body: formData
})
.then(response => response.json())
.then(json => {
dispatch(receiveVideos(json.data.items));
});
}
}
function startLoadingVideos() {
return {
type: START_LOADING_VIDEOS
}
}
function receiveVideos(videos) {
return {
type: RECEIVE_VIDEOS,
payload: videos
}
}
export default fetchVideos;

View File

@ -1,85 +0,0 @@
import {
fetchPlaces,
fetchRandomPlace,
fetchVideosByPlace,
fetchPlaceItemCount
} from '../utils/api';
import { APIError } from './errors';
import { getItem, setItem } from '../utils/safe-storage';
import { addVideosToState } from './videos';
import {
START_LOADING_ALL_PLACES,
LOADED_ALL_PLACES,
START_LOADING_RANDOM_PLACE,
LOADED_RANDOM_PLACE
} from './action_types';
export function getAllPlaces() {
return dispatch => {
dispatch(startLoadingAllPlaces());
// this calls the API
fetchPlaces()
.then(places => {
dispatch(loadedPlaces(places));
}).catch(error => {
dispatch(APIError(error));
})
};
};
function startLoadingAllPlaces() {
return {
type: START_LOADING_ALL_PLACES
};
};
function loadedPlaces(places) {
return {
type: LOADED_ALL_PLACES,
payload: places
};
};
// actions :
// - async actions
// - simple: return action type and payload.
export function getRandomPlaceVideos(numVideos=3) {
return dispatch => {
dispatch(loadingRandomPlaceVideos());
fetchRandomPlace()
.then(place => {
console.log('place', place);
return fetchPlaceItemCount(place.name)
.then(itemCount => {
fetchVideosByPlace(place.name, 0, numVideos)
.then(videos => {
console.log('place videos', videos);
dispatch(addVideosToState(videos));
dispatch(loadedRandomPlaceVideos(place, itemCount, videos))
});
})
})
.catch(e => {
console.log('error', e);
})
};
};
function loadedRandomPlaceVideos(place, itemCount, videos) {
return {
type: LOADED_RANDOM_PLACE,
payload: {
place: place,
itemCount: itemCount,
videos: videos
}
};
};
function loadingRandomPlaceVideos() {
return {
type: START_LOADING_RANDOM_PLACE
};
};

View File

@ -1,43 +0,0 @@
import {LOADED_ALL_RESULTS, LOADED_ALL_TOPICS, START_LOADING_ALL_RESULTS} from "./action_types";
import {fetchVideosByTopic} from "../utils/api";
import {APIError} from "./errors";
import {setItem} from "../utils/safe-storage";
export function getSearchResults(categoryKey, searchValue) {
// get the stuff from the api
// dispatch loaded
switch (categoryKey) {
case 'topic':
console.log('topic')
return dispatch => {
dispatch(loadingAllResults())
// this calls the API
fetchVideosByTopic(searchValue)
.then(videos => {
dispatch(loadedResults(videos));
}).catch(error => {
dispatch(APIError(error));
})
};
case 'date':
console.log('date')
case 'location':
console.log('location')
default:
console.log('none')
}
}
function loadingAllResults() {
return {
type: START_LOADING_ALL_RESULTS
}
}
function loadedResults(videos) {
return {
type: LOADED_ALL_RESULTS,
payload: videos
};
};

10
src/actions/test.js Normal file
View File

@ -0,0 +1,10 @@
import { TEST_ACTION } from './action_types';
function testAction(data) {
return {
type: TEST_ACTION,
payload: data
}
}
export default testAction;

View File

@ -1,70 +0,0 @@
import { fetchAllTopics, fetchVideosByTopic } from '../utils/api';
import { APIError } from './errors';
import { getItem, setItem } from '../utils/safe-storage';
import getRandomTopic from '../utils/get-random-topic';
import { addVideosToState } from './videos';
import {
START_LOADING_ALL_TOPICS,
LOADED_ALL_TOPICS,
START_LOADING_RANDOM_TOPIC,
LOADED_RANDOM_TOPIC
} from './action_types';
export function getAllTopics() {
return dispatch => {
dispatch(startLoadingAllTopics());
// this calls the API
fetchAllTopics()
.then(topics => {
dispatch(loadedTopics(topics));
}).catch(error => {
dispatch(APIError(error));
})
};
};
function startLoadingAllTopics() {
return {
type: START_LOADING_ALL_TOPICS
};
};
function loadedTopics(topics) {
// cache
setItem('allTopics', JSON.stringify(topics));
setItem('topicsUpdatedAt', new Date());
return {
type: LOADED_ALL_TOPICS,
payload: topics
};
};
// actions :
// - async actions
// - simple: return action type and payload.
export function getRandomTopicVideos(allTopics, numVideos=4) {
return dispatch => {
const randomTopic = getRandomTopic(allTopics);
dispatch(loadingRandomTopicVideos());
fetchVideosByTopic(randomTopic.name, 0, 4)
.then(videos => {
dispatch(addVideosToState(videos));
dispatch(loadedRandomTopicVideos(randomTopic, videos));
});
};
};
function loadedRandomTopicVideos(topic, videos) {
return {
type: LOADED_RANDOM_TOPIC,
payload: {
topic: topic,
videos: videos
}
};
};
function loadingRandomTopicVideos() {
return {
type: START_LOADING_RANDOM_TOPIC
};
};

View File

@ -1,8 +0,0 @@
import { ADD_VIDEOS_TO_STATE } from './action_types';
export function addVideosToState(videos) {
return {
type: ADD_VIDEOS_TO_STATE,
payload: videos
};
}

Binary file not shown.

View File

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 376 384.9" style="enable-background:new 0 0 376 384.9;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
</style>
<g>
<g>
<path d="M142.1,190.3l11.5,9.5l5.9-7.1l11.5,9.7l-9.5,11.6l-11.6-9.5l-5.8,7l-11.6-9.6L142.1,190.3z M171.3,213.8l13.3,35.8h6.2
v20.2h-13.6c-3.2-5-6-10.8-8.1-16.5c-2.8,4.4-8,12.8-8,12.8L136.6,256c0,0,1-18.8,1.1-18.9c6.2-8.5,23.7-15.1,23.7-15.1l0.7-5
L171.3,213.8z M152.7,236.7l13.6,9c-2.4-7.3-3.6-12.7-3.6-12.7L152.7,236.7z"/>
<path d="M215.5,232.4l-1.5,2.2c0,0,4.7,11.9,16.8,15h15c0.3,0-6.5,20.3-6.5,20.3s-52.8,0.1-52.9,0v-20.2h14.2c-4.5-5-6-9-6-9
s-0.9-2.5-0.8-3.1c1.3-4.8,6.9-18,16-23.6c11.6-6.6,27.4,7.1,27.4,7.1l-5.7,13.4C231.6,234.5,219.7,225.9,215.5,232.4z"/>
<path d="M257.5,198.3l14.2-10.3h1.6v61.7h11.1v20.2h-26.9V198.3z"/>
<path d="M279.9,269.9v-20.2h3.9c5.5-2.4,11.9-12,11.9-12l8.5,5.8c-1.2,2.3-2.2,4.4-3,6.2h24.6l-3.8-7.3l10.1-9.1
c0,0,7.1,7.4,7.1,16.4h15l-8.1-13l12.9-12.7c0,0,9.9,13.5,9.8,25.7c0.1-0.1-10.9,20.2-10.9,20.2h-23.3c0,0-1.2-1.8-2.7-4.5
c-3,3-6,4.5-6,4.5h-30.7l-2.8-4.6c-1.4,1.5-3.2,3.1-5.4,4.6H279.9z"/>
</g>
<rect x="118.8" y="1.5" class="st0" width="86.4" height="201.7"/>
<rect x="203.4" y="1.5" class="st0" width="86.4" height="201.7"/>
<rect x="288" y="1.5" class="st0" width="86.4" height="201.7"/>
<g>
<path d="M13.3,278.9h1.5v78.5H1.5H0v-68.9L13.3,278.9z"/>
<path d="M23.4,376c10.2-9.7,14.6-14.7,18.4-20.3c-13-3.8-18.2-16.1-20.5-21.1c3.5-22.7,30-26.2,30-26.2
c6.7,6.5,12.1,16.8,13.4,26.4c0,0-0.1,17.8-23.2,49.2L23.4,376z M49.4,336.6l-6-12.2c-1.1,0.8-4,3.4-5.9,6.3
C37.6,330.6,39.9,335.5,49.4,336.6z"/>
<path d="M130.9,336.8v19h-9.1l-4.7-6.5l-3.8,6.5h-29c-6.7-0.5-11.6-10-13.3-13.1l10.9-9.7c0,0,4,3.9,6.3,3.9h20.6l-14.7-19.9
l11.5-10c0,0,11.3,8.9,18.6,29.9H130.9z"/>
<path d="M128.2,359.8l10.8,8.9l5.5-6.7l10.8,9.1l-8.9,10.9l-10.9-8.9l-5.4,6.6l-10.9-9L128.2,359.8z M146.5,355.8
c0,0,13.4-19.1,13.3-19c0.9-9.3-10.2-29.7-10.2-29.7L137.5,319l8.6,17.8H127c0,0,0.1,19.1,0.1,19H146.5z"/>
<path d="M162.4,376.9c23.4-22.1,26.3-34,26.3-34l-10.2-17.4l13.9-11.6c0,0,9.9,18.7,10.2,23h7.3v19h-12.1
c-3.1,7.5-8.4,17.2-17.1,29.1L162.4,376.9z M184.5,292l10,10.1l-10,10l-10.1-10L184.5,292z"/>
<path d="M231.4,336.8h14.1v19h-15.3l-6.1-8.8l-6.3,8.8h-12.7v-19h12.5l-6.4-10.2c0,0,12-12,12.1-11.9
C223.3,314.6,232.3,327.5,231.4,336.8z M206.8,371.2l10.9,9l5.4-6.6l10.9,8.9l8.9-10.9l-10.8-9.1l-5.5,6.7l-10.8-8.9L206.8,371.2z
"/>
<path d="M243,355.8c0,0.1-0.1-19-0.1-19H262l-8.6-17.8l12.1-11.9c0,0,11,20.4,10.2,29.7c0.1-0.1-13.3,19-13.3,19H243z
M262.3,361.4l10,10.1l-10,10l-10.1-10L262.3,361.4z"/>
<path d="M283.4,376c10.2-9.7,14.6-14.7,18.4-20.3c-13-3.8-18.2-16.1-20.5-21.1c3.5-22.7,30-26.2,30-26.2
c6.7,6.5,12.1,16.8,13.4,26.4c0,0-0.1,17.8-23.2,49.2L283.4,376z M309.4,336.6l-6-12.2c-1.1,0.8-4,3.4-5.9,6.3
C297.6,330.6,299.9,335.5,309.4,336.6z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -1,574 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 498.6 690" style="enable-background:new 0 0 498.6 690;" xml:space="preserve">
<style type="text/css">
.st0{fill:#221F1F;}
.st1{fill:#1B111E;}
.st2{fill:#FFFFFF;}
</style>
<g>
<g>
<g id="XMLID_5_">
<path d="M496,151.9l-19.7,74.9c-20.3-32.7-39.5-77.7-57.5-134.9c-14.2,49.9-33.2,95.2-56.9,135.7L342,152.6
C370.8,108.2,393,57.3,408.4,0h21.1c6.2,22.6,12.6,42.5,19.1,59.4C460.5,90.6,476.3,121.4,496,151.9z"/>
<path d="M458.1,351.9c23.4,14.3,37.1,32.7,37.1,59.2c0,41.8-27.6,67.7-76.9,67.7c-41.8,0-71.4-19.4-71.4-62.2
c0-22.5,10.9-42.5,35-56.1c-21.8-13.9-31.6-31.9-31.6-53.7c0-41.8,28.9-63.9,71-63.9c42.9,0,70.1,20.1,70.1,59.2
C491.4,323,479.1,340.3,458.1,351.9z M420.3,440c19,0,26.5-10.2,26.5-29.9c0-17.7-11.6-29.2-29.2-35.4
c-14.3,5.4-23.1,20.1-23.1,36C394.4,429.8,401.2,440,420.3,440z M422.3,338.6c13.3-5.8,21.4-19.7,21.4-33.3
c0-16.3-8.8-24.5-23.4-24.5c-15,0-23.5,8.5-23.5,23.8C396.8,320.6,405,332.5,422.3,338.6z"/>
<path d="M197.9,246.3h119.4c0,13-1.4,29.6-3.4,42.9h-76.5l-4.1,46.6h3.4c44.5,0,85,17.3,85,69.7c0,44.9-34,73.5-80.9,73.5
c-20.1,0-40.1-3.4-56.5-9.9v-49.7c5.8-0.7,14.9-1,20.7-1c6.1,0,13.6,0.4,19.4,1l3.1,18c4.8,1,8.8,1.7,13.9,1.7
c19.7,0,30.2-10.6,30.2-31.3c0-22.8-15.6-31.9-53-31.9h-31.3C188.7,332.3,193.1,283,197.9,246.3z"/>
<path d="M314.7,131.2c0,40.6-5.4,68.5-16.1,83.8c-7,9.9-25.5,14.7-55.6,14.7c-18.9,0-31.9-3.1-39.1-9.4c-8.7-7.7-13-22.8-13-45.4
c0-39.8,7.6-78.7,22.8-116.8c14-35.2,29.2-52.9,45.4-52.9c14.4,0,27.3,12.6,38.6,37.9C309.1,68.3,314.7,97.7,314.7,131.2z
M279.5,152c0-13-2.1-27.3-6.5-42.9c-5.4-19.7-12.2-29.5-20.5-29.5c-6,0-11.8,9-17.2,27c-4.6,15.3-6.9,28-6.9,37.9
c0,6.8,2.9,11.1,8.6,13c2.6,0.9,7.6,1.4,15.1,1.4C260.1,158.9,269.2,156.6,279.5,152z"/>
<path d="M160.7,151.9l-19.7,74.9c-20.3-32.7-39.5-77.7-57.5-134.9c-14.2,49.9-33.2,95.2-56.9,135.7L6.8,152.6
C35.6,108.2,57.7,57.3,73.2,0h21.1c6.2,22.6,12.6,42.5,19.1,59.4C125.2,90.6,141,121.4,160.7,151.9z"/>
<path d="M118,351.9c23.4,14.3,37.1,32.7,37.1,59.2c0,41.8-27.6,67.7-76.9,67.7c-41.8,0-71.4-19.4-71.4-62.2
c0-22.5,10.9-42.5,35-56.1c-21.8-13.9-31.6-31.9-31.6-53.7c0-41.8,28.9-63.9,71-63.9c42.9,0,70.1,20.1,70.1,59.2
C151.3,323,139.1,340.3,118,351.9z M80.2,440c19,0,26.5-10.2,26.5-29.9c0-17.7-11.6-29.2-29.2-35.4c-14.3,5.4-23.1,20.1-23.1,36
C54.4,429.8,61.2,440,80.2,440z M82.3,338.6c13.3-5.8,21.4-19.7,21.4-33.3c0-16.3-8.8-24.5-23.4-24.5c-15,0-23.5,8.5-23.5,23.8
C56.7,320.6,64.9,332.5,82.3,338.6z"/>
</g>
</g>
<g>
<g>
<g>
<path class="st0" d="M34.7,689.5l-2.5-7.2H20.3l-2.5,7.2h-6.9l12.4-32.4h6.3l12.3,32.4H34.7z M27.9,670.2
c-0.6-1.9-1.3-3.8-1.6-5c-0.3,1.2-1,3.1-1.6,5l-2.1,5.9H30L27.9,670.2z"/>
<path class="st0" d="M59.5,689.5v-13.1c0-4.4-1.5-5.6-4.1-5.6c-2.6,0-4.2,1.3-4.2,5.5v13.3h-6.4v-24.3h6.4v1.6
c1.1-1.2,3.1-2.1,5.7-2.1c6.2,0,9,4.3,9,11.1v13.7H59.5z"/>
<path class="st0" d="M94.7,689.5v-1.6c-1.2,1.2-3.2,2.1-5.5,2.1c-4.5,0-9.1-2.8-9.1-8.7c0-5.4,4.4-8.1,9.9-8.1
c2.2,0,3.7,0.5,4.7,1v-1.2c0-1.7-1.2-3.1-3.5-3.1c-2.9,0-4.4,0.4-6.7,1.6l-2.5-4.4c2.8-1.6,5.2-2.5,9.1-2.5
c5.9,0,9.9,3.1,9.9,8.5v16.3H94.7z M94.7,679.3c-1.1-0.7-2.2-1-4.4-1c-2.4,0-3.7,1.1-3.7,3.1c0,1.7,1,3.2,3.7,3.2
c2.1,0,3.7-1.1,4.4-2.2V679.3z"/>
<path class="st0" d="M119.3,672.6c-1-0.9-2.3-1.6-3.7-1.6c-2.5,0-4.1,1.1-4.1,5.3v13.1h-6.4v-24.3h6.4v1.6
c1.1-1.2,2.7-2.1,5-2.1c2.1,0,3.7,0.8,4.5,1.7L119.3,672.6z"/>
<path class="st0" d="M132.3,690c-6.3,0-11.4-5.2-11.4-12.6c0-7.5,4.9-12.7,11.7-12.7c4.6,0,7.6,2.3,9.6,5.4l-4.2,4.3
c-1.4-2-3-3.5-5.6-3.5c-3.1,0-5,2.5-5,6.5c0,3.9,2,6.5,5,6.5c2.5,0,4.1-1.1,5.7-3.1l4.1,3.8C139.9,687.7,137.2,690,132.3,690z"
/>
<path class="st0" d="M159.7,689.5v-13.1c0-4.4-1.5-5.6-4.1-5.6s-4.2,1.3-4.2,5.5v13.3h-6.4v-30.5l6.4-3.2v11.1
c1.1-1.2,3.1-2.1,5.7-2.1c6.2,0,9,4.3,9,11.1v13.7H159.7z"/>
<path class="st0" d="M173.5,663.2c-2,0-3.7-1.7-3.7-3.7s1.7-3.7,3.7-3.7s3.7,1.7,3.7,3.7S175.5,663.2,173.5,663.2z M170.4,689.5
v-24.3h6.4v24.3H170.4z"/>
<path class="st0" d="M194.6,689.5H188l-8.7-24.3h7l3.6,11.2c0.6,1.9,1.3,4.2,1.5,5.3c0.3-1.2,0.9-3.4,1.5-5.3l3.6-11.2h6.9
L194.6,689.5z"/>
<path class="st0" d="M224.5,679.4H210c0.2,3.3,2.7,4.6,5,4.6c1.8,0,3.2-0.6,4.2-1.7l4.5,3.8c-1.9,2.5-5.5,3.9-8.7,3.9
c-7,0-11.4-5-11.4-12.6c0-7.5,4.7-12.7,10.8-12.7c6.5,0,10.2,5.7,10.2,12.7C224.6,678.3,224.6,678.9,224.5,679.4z M214.1,670.2
c-2.3,0-3.7,1.9-4,4.4h8.3C218.2,672.4,216.9,670.2,214.1,670.2z"/>
<path class="st0" d="M248.9,690c-6.3,0-11-5.2-11-12.6c0-7.5,4.6-12.7,11-12.7c6.3,0,11,5.2,11,12.7
C259.9,684.8,255.2,690,248.9,690z M248.9,670.8c-3.1,0-4.5,2.8-4.5,6.5c0,3.7,1.4,6.5,4.5,6.5c3.1,0,4.5-3.1,4.5-6.5
C253.4,673.7,251.9,670.8,248.9,670.8z"/>
<path class="st0" d="M272.5,661.2c-1.9,0-2.4,0.6-2.4,1.9v2h4.1v6h-4.1v18.3h-6.4v-18.3h-2.9v-6h2.9v-2.9c0-4.5,2.5-6.4,6.9-6.4
c1.6,0,2.9,0.2,4,0.7v5.1C274.1,661.4,273.4,661.2,272.5,661.2z"/>
<path class="st0" d="M303,672.6c-1-0.9-2.3-1.6-3.7-1.6c-2.5,0-4.1,1.1-4.1,5.3v13.1h-6.4v-24.3h6.4v1.6c1.1-1.2,2.7-2.1,5-2.1
c2.1,0,3.7,0.8,4.5,1.7L303,672.6z"/>
<path class="st0" d="M325.6,679.4h-14.5c0.2,3.3,2.7,4.6,5,4.6c1.8,0,3.2-0.6,4.2-1.7l4.5,3.8c-1.9,2.5-5.5,3.9-8.7,3.9
c-7,0-11.4-5-11.4-12.6c0-7.5,4.7-12.7,10.8-12.7c6.5,0,10.2,5.7,10.2,12.7C325.7,678.3,325.6,678.9,325.6,679.4z M315.1,670.2
c-2.3,0-3.7,1.9-4,4.4h8.3C319.3,672.4,318,670.2,315.1,670.2z"/>
<path class="st0" d="M337.6,690c-3.8,0-7.6-1.1-10.2-2.8l2.1-4.9c2.6,1.4,5.3,2.2,8.4,2.2c2.5,0,3.2-0.6,3.2-1.9
c0-1.1-0.9-1.7-3.6-2.5c-5.8-1.8-9.6-3.2-9.6-8.3c0-5,4-7.2,9.7-7.2c3.1,0,6.4,0.9,9,2.4l-2,5c-2.4-1.3-5-1.9-7.1-1.9
c-2.6,0-3.3,0.5-3.3,1.6c0,1,0.7,1.4,5,2.8c4.4,1.4,8.1,3,8.1,7.9C347.5,688,343.1,690,337.6,690z"/>
<path class="st0" d="M354.6,663.2c-2,0-3.7-1.7-3.7-3.7s1.7-3.7,3.7-3.7c2,0,3.7,1.7,3.7,3.7S356.6,663.2,354.6,663.2z
M351.4,689.5v-24.3h6.4v24.3H351.4z"/>
<path class="st0" d="M371.6,690c-3.8,0-7.6-1.1-10.2-2.8l2.1-4.9c2.6,1.4,5.3,2.2,8.4,2.2c2.5,0,3.2-0.6,3.2-1.9
c0-1.1-0.9-1.7-3.6-2.5c-5.8-1.8-9.6-3.2-9.6-8.3c0-5,4-7.2,9.7-7.2c3.1,0,6.4,0.9,9,2.4l-2,5c-2.4-1.3-5-1.9-7.1-1.9
c-2.6,0-3.3,0.5-3.3,1.6c0,1,0.7,1.4,5,2.8c4.4,1.4,8.1,3,8.1,7.9C381.5,688,377,690,371.6,690z"/>
<path class="st0" d="M398.2,688.5c-1.1,0.8-3,1.5-5,1.5c-3.9,0-6.5-3.1-6.5-7.3v-11.5h-4.1v-6h4.1v-6.2l6.4-3.2v9.4h5.8v6h-5.8
v9.8c0,2.3,0.8,2.9,2.4,2.9c1.2,0,2-0.5,3.6-1.9L398.2,688.5z"/>
<path class="st0" d="M415.8,689.5v-1.6c-1.2,1.2-3.2,2.1-5.5,2.1c-4.5,0-9.1-2.8-9.1-8.7c0-5.4,4.4-8.1,9.9-8.1
c2.2,0,3.7,0.5,4.7,1v-1.2c0-1.7-1.2-3.1-3.5-3.1c-2.9,0-4.4,0.4-6.7,1.6l-2.5-4.4c2.8-1.6,5.2-2.5,9.1-2.5
c5.9,0,9.9,3.1,9.9,8.5v16.3H415.8z M415.8,679.3c-1.1-0.7-2.2-1-4.4-1c-2.4,0-3.7,1.1-3.7,3.1c0,1.7,1,3.2,3.7,3.2
c2.1,0,3.7-1.1,4.4-2.2V679.3z"/>
<path class="st0" d="M440.9,689.5v-13.1c0-4.4-1.5-5.6-4.1-5.6s-4.2,1.3-4.2,5.5v13.3h-6.4v-24.3h6.4v1.6
c1.1-1.2,3.1-2.1,5.7-2.1c6.2,0,9,4.3,9,11.1v13.7H440.9z"/>
<path class="st0" d="M461.4,690c-6.3,0-11.4-5.2-11.4-12.6c0-7.5,4.9-12.7,11.7-12.7c4.6,0,7.6,2.3,9.6,5.4l-4.2,4.3
c-1.4-2-3-3.5-5.6-3.5c-3.1,0-5,2.5-5,6.5c0,3.9,2,6.5,5,6.5c2.5,0,4.1-1.1,5.7-3.1l4.1,3.8C469,687.7,466.2,690,461.4,690z"/>
<path class="st0" d="M493.3,679.4h-14.5c0.2,3.3,2.7,4.6,5,4.6c1.8,0,3.2-0.6,4.2-1.7l4.5,3.8c-1.9,2.5-5.5,3.9-8.7,3.9
c-7,0-11.4-5-11.4-12.6c0-7.5,4.7-12.7,10.8-12.7c6.5,0,10.2,5.7,10.2,12.7C493.4,678.3,493.3,678.9,493.3,679.4z M482.8,670.2
c-2.3,0-3.7,1.9-4,4.4h8.3C487,672.4,485.7,670.2,482.8,670.2z"/>
</g>
</g>
</g>
<polygon class="st1" points="175.1,532.1 173.7,530.4 207.5,501.6 208.8,503.3 "/>
<path class="st1" d="M336,528c2.6-3,4.9-4.5,6.7-4.5c2.1,0,3.1,1.4,3.1,4.3c0,4.4-1.7,8.8-4.9,13.2c-1.6,0.5-3.2,0.7-5,0.7
c-3.2,0-4.7-1.3-4.7-4C331.3,534.9,332.8,531.7,336,528z M340.9,536.3c1-2.1,1.5-4.3,1.5-6.6c0-1-0.3-1.5-0.9-1.5
c-0.6,0-1.5,0.7-2.8,2c-2.1,2-3.1,3.6-3.1,4.6c0,1.3,0.8,1.9,2.5,1.9C338.9,536.6,339.8,536.5,340.9,536.3z"/>
<g>
<g>
<path class="st2" d="M9.4,591.5c0.2,0,0.5,0.1,0.7,0.1c0.7,0.2,1.3,0.3,2,0.5l-0.1,0c1.7-0.5,3.2,3,5,0.1
c1.2-0.2,2.3-0.4,3.5-0.6l0.1,0l-0.1-0.1c0.5,0.4,1.1,0.8,1.6,1.2l0.3,0c0.3-0.2,0.6-0.4,0.9-0.6c0.3,0,0.6-0.1,0.9-0.1l-0.1,0.1
c0.5,0,0.9-0.1,1.4-0.1l-0.1,0.1c0.3,0,0.7,0,1-0.1c2,2.3,3.7,2,5.2-1c2.3,1.6,4.4,3.5,7.6,2.5c2-0.6,4-1,6-1.5l-0.1,0
c0.6,1,1.2,1.9,1.5,2.4c1.6-0.2,2.6-0.3,3.6-0.4c2.6-0.4,5.3-0.8,7.9-1.2c0.8,0.4,1.6,1.1,2.4,1.1c2.4,0.1,4.8,0,7.2,0
c0.3,0.7,0.6,1.3,0.9,2c0.1,0.1,0.1,0.3,0.2,0.4c0.5,0.2,0.9,0.5,1.4,0.7l-0.1-0.1c1.8-0.3,3.6-0.9,5.4-1c4.3-0.1,8.7,0,13,0.1
c0.3,0,0.6,0.1,0.9,0.2c1.3,0.5,2.5,1.5,3.8,1.6c3.1,0.2,6.1,0.2,9.2,0.1c4-0.2,8-0.5,11.9-0.7c1.5-0.1,3.5,0.2,3.2-2.4
c0.6-0.1,1.2-0.1,1.7-0.2l0-0.1c0,0.1-0.1,0.3-0.1,0.4c0.1-0.1,0.2-0.2,0.2-0.3l0.1,0c0.4-0.3,0.7-0.6,1.1-0.8l-0.1,0.1
c0.4,0,0.7,0,1.1-0.1l-0.1-0.1c1.1,2.4,2.4,0.7,3.7,0.3l-0.1,0.1c0.2,0.1,0.3,0.2,0.3,0.4c0.2-0.1,0.4-0.1,0.5-0.3
c0.3,0,0.6-0.1,0.9-0.1l-0.1,0c1,0,2.1,0,3.1,0c0.2,0,0.4,0,0.6,0c1,0,2,0,3-0.2c4-0.6,8-1.2,12-1.9c1-0.2,2.3-0.9,2.8-1.8
c1.9-3,3.6-6.1,5.4-9.3c1-1.9,2.1-3.7,2.9-5.7c1.5-3.7,0-6.1-3.5-7.6c-1.6-0.6-2.9-2.3-4.3-3.4c1.4-0.6,2.7-1.2,4.1-1.8
c0.5-0.2,1-0.5,1.5-0.5c3.1-0.4,4.3,0.9,3.7,4c-0.7,4-0.5,4.3,3.4,5.1c0.5-0.7,1-1.5,1.6-2.3c4.9-6.5,7-13.9,7-21.9
c0-2.1-1.5-3.9-3.5-3.2c-3,1.2-6.4,1.7-9.1,3c-4.7,2.2-9.2,1.5-13.9,1.6c-4.3,0.1-9.1-0.5-11.5,4.8c-1.6,3.7-4,7.1-5.6,10.8
c-1.2,2.7-1,5.6,1.1,8.1c1.2,1.4,2.4,2.8,3.9,4.4c-0.9,0.5-1.5,1.1-2.1,1.2c-6.6,1.1-13.1,2.3-19.7,3.3c-3,0.4-6,0.5-9,0.6
c-6.2,0.3-12.4,0.6-18.6,0.9c-0.1,0.1-0.1,0.3-0.2,0.4l-0.1,0.1c-0.2,0-0.3,0-0.5,0c-0.2-0.1-0.5-0.1-0.7-0.2
c-0.1-0.1-0.1-0.2-0.1-0.3c-3-0.3-6-1-8.9-0.8c-3.9,0.3-8.2-1.3-11.5,2.1l0.1-0.1c0,0.2,0,0.4-0.2,0.6c-0.4-0.4-0.7-0.8-1.1-1.1
c0,0.1-0.1,0.2-0.2,0.3c-1.1,0.1-2.2,0.1-3.3,0.2c-0.2-0.2-0.3-0.3-0.5-0.5c-2.7,0.5-5.6-1.4-8.2,0.6c-0.3,0.2-0.9,0.3-1.2,0.2
c-5.8-2.4-10.8,0.1-15.8,2.4l0.1-0.1c-0.6,0.2-1.2,0.5-1.8,0.7l0.2,0c-1.5-0.2-2.8-2.7-4.6-0.6c-0.2,0-0.4,0-0.6,0
c-0.4-0.2-0.8-0.4-1.3-0.6c-0.2-0.2-0.5-0.4-0.7-0.6c-0.1-0.2-0.1-0.4-0.2-0.5c-0.1,0.2-0.3,0.4-0.4,0.5c-0.2,0-0.4,0-0.6-0.1
c-2.4-1.4-4.4-0.3-6.5,1l0.1-0.1c-0.2,0.1-0.5,0.2-0.7,0.3l0.1,0.1c0-0.3,0-0.5,0-0.8c-1.6-1.2-2.7-1.1-3.4,0.9
c-0.5-0.1-0.9-0.2-1.4-0.3l0.1,0c-0.6-0.2-1.2-0.3-1.8-0.5c-0.4,0-0.8-0.1-1.2-0.1l0.1,0c-0.6,0-1.2,0.1-1.8,0.1
c-0.1,0-0.3,0-0.4,0c-0.3,0.2-0.6,0.5-0.8,0.7l0.1-0.1c-0.3,0-0.6,0-0.9,0l0,0.1c-0.3,0.1-0.6,0.1-0.9,0.2
c0.2,0.2,0.4,0.4,0.5,0.5l0.1,0c0.6,0.4,1.2,0.8,1.8,1.2c0.2,0,0.5,0,0.7,0c0.7-0.7,2.3,1.5,2.6-0.7c0.9,0.4,1.7,0.9,2.6,1.3
c0,0.2,0,0.5,0,0.7c0,0.2,0,0.4,0,0.6c-0.4,0.9-0.9,1.8,0.8,1.4L9.4,591.5z M200.1,591.9c0.1,0.3,0.2,0.7,0.3,1
c-3.9,6.2-9.5,10.7-15.2,15.2c-2.7,2.1-4.8,5.3-8.6,5.6c-2.6,0.2-3,1.5-2.1,3.8c2.8-0.3,5.8-0.1,8.4-0.9
c10.9-3.5,18.1-11.5,24.2-20.6c1.3-1.9,2.1-2.2,4-1.7c3.2,0.8,6.4,2.1,9.6,2.2c5.3,0.2,10.7,0,16-0.7c2.5-0.3,5.2-1.7,5.6-5.1
c0.6-4.6,0.8-9.3,2.4-13.6c1.2-3.5,0.5-6.2-0.6-9.3c-0.2-0.7-0.7-1.3-1.1-2c-0.4-0.8-0.7-1.6-1-2.4c-1,0.8-2.5,1.4-2.8,2.3
c-0.9,2.9-1.4,5.9-1.8,8.9c-0.5,4.1-2.3,6.3-6.2,6.5c-5.4,0.2-10.7,0.1-16.1-0.1c-0.7,0-1.8-1.1-1.9-1.9c-0.3-1.3,0-2.8,0.1-4.2
c0.3-4.2,0.9-8.5,0.9-12.7c0-1.1-1.8-3.3-2.6-3.2c-4.8,0.6-9.9,1.7-12.8,5.8c-5,7.1-8.7,14.9-7.8,24.1c0.3,2.7,3.2,4.7,5.6,3.7
C197.7,592.3,198.9,592.2,200.1,591.9z M50.6,632.4c1.2-0.2,2.1,0,2.4-0.4c4.1-4.8,10.5-7.3,13.1-13.7c1.8-4.4,1.7-5.1-3.2-5.5
c-5.5-0.4-6.5-1.3-8.4-6.4c-0.4-1.2-2.2-2.7-3.4-2.8c-4.6-0.4-7.8,3-10.9,5.5c-2.2,1.9-4.2,2.2-6.3,1.3c-3.5-1.5-6.7-3.5-10-5.3
c-0.5-0.3-1.3-0.7-1.7-0.5c-2.4,1.4-5.3,2.5-7.1,4.6c-2.5,2.8-4.4,6.2-6.2,9.5c-1.7,3-0.7,4.7,2.9,5.2c4.9,0.7,8.6,3.7,12.2,6.8
c0.9,0.8,2.9,1.7,3.5,1.3c2.3-1.6,4.1-3.7,6.2-5.5c0.8-0.7,1.9-1.6,2.8-1.6c5,0.1,9,2.7,12.5,6C49.4,631.6,50.1,632.1,50.6,632.4
z M252.7,537.8c-7.1,0-13.8-0.4-20.5,0.2c-3,0.3-5.6,0.9-8-1.1c-1.2-1-2.4-2.1-3.6-3.2c-4.7-4.7-4.7-4.7-8.1,0.9
c-2.8,4.5-4.9,9.1-3.9,14.6c0.4,2.4,1,4.1,4.2,5c3.8,1.1,7.3,4,10.2,6.8c2.5,2.4,2.9,3,5.4,0.4c3.8-4,8.4-5.4,13.7-5.2
c4,0.2,10.4-5.5,10.6-9.6C252.8,543.7,252.7,540.8,252.7,537.8z M184.4,556.6c-1.9,2.5-4.5,4.4-4.9,6.7c-1.3,6.8-6.5,11-9.8,16.4
c-4.2,6.7-9.4,12.9-14.2,19.3c-5.5,7.5-10.9,15.1-16.6,22.4c-1.7,2.2-1.6,4,0.2,5.2c1,0.6,3.5,0.1,4.6-0.8
c3.5-3.1,6.8-6.5,10-10.1c4.4-5.1,8.9-10.1,12.8-15.5c5.9-8.2,11.3-16.8,17.2-25.1c2.2-3,3.9-6.1,4.3-9.8
C188.2,562.1,187.6,559.2,184.4,556.6z M224.8,523.1c0,3.7,0.3,4,3.3,4.4c1.1,0.2,2.2,0.7,3,1.3c4.3,3.3,7.3,2.8,10-2
c0.3-0.6,0.6-1.1,0.9-1.7c4.1-7.3-1.1-14.6-8-16.2c-1-0.2-2.3,0.3-3.2,0.9C225.8,513.1,226.4,519,224.8,523.1z"/>
<path d="M126.5,594.2c-0.3,0-0.6,0.1-0.9,0.1c-0.2,0-0.4,0.1-0.5,0.3c0-0.2-0.1-0.3-0.3-0.4c0,0-0.1,0-0.1,0l0.2-0.1
c-1.3,0.4-2.6,2.1-3.7-0.3l0.1,0.1c-0.4,0-0.7,0-1.1,0.1c0,0,0.1-0.1,0.1-0.1c-0.4,0.3-0.7,0.6-1.1,0.8c0,0-0.1-0.1-0.1-0.1
l-0.1,0.2c-0.6,0.1-1.2,0.1-1.7,0.2c0.3,2.6-1.6,2.3-3.2,2.4c-4,0.3-7.9,0.6-11.9,0.7c-3.1,0.1-6.2,0.2-9.2-0.1
c-1.3-0.1-2.5-1-3.8-1.6c-0.3-0.1-0.6-0.2-0.9-0.2c-4.3,0-8.7-0.2-13-0.1c-1.8,0-3.6,0.6-5.4,1l0.1,0.1c-0.5-0.2-0.9-0.5-1.4-0.7
c0.2-0.1,0.3-0.2,0.4-0.4c0.1-0.1,0.2-0.1,0.2-0.2c0.3-0.1,0.7-0.3,1-0.4c0.1-0.1,0.2-0.2,0.2-0.2l-0.1-0.2l0.1-0.2
c-0.1-0.1-0.2-0.2-0.2-0.2c-0.1-0.1-0.2-0.3-0.3-0.4c-0.4,0-0.7,0-1.1,0l-0.2,0c-0.4,0-0.8,0-1.1,0c-2.4,0-4.8,0.1-7.2,0
c-0.8,0-1.6-0.7-2.4-1.1c1.6-2.7,2.2-5.6,1.4-8.7c0.2-0.2,0.2-0.3,0.2-0.6c0,0-0.1,0.1-0.1,0.1c3.4-3.4,7.7-1.8,11.5-2.1
c2.9-0.2,5.9,0.5,8.9,0.8c-0.1,0.1-0.2,0.1-0.2,0.2c0,0.1,0,0.2,0.1,0.2c0.1,0,0.2,0,0.2-0.1c0.2,0.1,0.5,0.1,0.7,0.2
c0.2,0,0.3,0,0.5,0l0.1-0.1l0.2-0.1l0-0.3c6.2-0.3,12.4-0.6,18.6-0.9c3-0.2,6-0.2,9-0.6c6.6-1,13.2-2.1,19.7-3.3
c0.6-0.1,1.2-0.7,2.1-1.2c-1.4-1.6-2.7-3-3.9-4.4c-2.2-2.5-2.3-5.4-1.1-8.1c1.6-3.7,4-7.1,5.6-10.8c2.4-5.4,7.2-4.7,11.5-4.8
c4.7-0.1,9.2,0.6,13.9-1.6c2.7-1.3,6.1-1.8,9.1-3c1.9-0.8,3.5,1.1,3.5,3.2c0,8-2.1,15.4-7,21.9c-0.6,0.7-1.1,1.5-1.6,2.3
c-3.9-0.8-4.1-1.1-3.4-5.1c0.6-3.1-0.7-4.4-3.7-4c-0.5,0.1-1,0.3-1.5,0.5c-1.4,0.6-2.7,1.2-4.1,1.8c1.4,1.2,2.6,2.8,4.3,3.4
c3.6,1.4,5,3.9,3.5,7.6c-0.8,2-1.9,3.8-2.9,5.7c-1.7,3.1-3.4,6.3-5.4,9.3c-0.6,0.9-1.8,1.6-2.8,1.8c-4,0.8-8,1.3-12,1.9
c-1,0.1-2,0.1-3,0.2c0-0.5-0.1-1-0.1-1.6c-0.1-0.1-0.3-0.1-0.4,0c0,0.5-0.1,1-0.1,1.6C128.5,594.1,127.4,594.2,126.5,594.2
c-0.1,0,0.1-0.1,0.1-0.1L126.5,594.2z"/>
<path d="M200.1,591.9c-1.2,0.3-2.4,0.3-3.4,0.8c-2.4,1-5.3-1-5.6-3.7c-0.9-9.2,2.8-17,7.8-24.1c2.9-4.1,8-5.1,12.8-5.8
c0.7-0.1,2.6,2.1,2.6,3.2c0,4.2-0.6,8.5-0.9,12.7c-0.1,1.4-0.4,2.8-0.1,4.2c0.2,0.7,1.2,1.8,1.9,1.9c5.4,0.2,10.7,0.3,16.1,0.1
c3.9-0.1,5.7-2.4,6.2-6.5c0.4-3,0.9-6,1.8-8.9c0.3-1,1.8-1.6,2.8-2.3c0.3,0.8,0.6,1.6,1,2.4c0.3,0.7,0.8,1.3,1.1,2
c1.1,3,1.8,5.8,0.6,9.3c-1.5,4.3-1.8,9-2.4,13.6c-0.4,3.4-3.1,4.8-5.6,5.1c-5.3,0.7-10.7,0.9-16,0.7c-3.2-0.1-6.4-1.4-9.6-2.2
c-1.8-0.5-2.7-0.2-4,1.7c-6.1,9.1-13.4,17.1-24.2,20.6c-2.6,0.8-5.6,0.6-8.4,0.9c-0.9-2.3-0.5-3.6,2.1-3.8
c3.8-0.3,5.9-3.4,8.6-5.6c5.7-4.4,11.2-9,15.2-15.2C200.3,592.6,200.2,592.3,200.1,591.9z"/>
<path d="M50.6,632.4c-0.4-0.3-1.1-0.9-1.7-1.5c-3.5-3.4-7.4-6-12.5-6c-0.9,0-2,0.9-2.8,1.6c-2.1,1.8-3.9,4-6.2,5.5
c-0.6,0.4-2.5-0.5-3.5-1.3c-3.6-3.1-7.3-6.1-12.2-6.8c-3.6-0.5-4.7-2.2-2.9-5.2c1.9-3.3,3.7-6.7,6.2-9.5c1.8-2,4.6-3.2,7.1-4.6
c0.3-0.2,1.1,0.2,1.7,0.5c3.3,1.8,6.6,3.9,10,5.3c2.1,0.9,4.1,0.6,6.3-1.3c3.1-2.6,6.3-6,10.9-5.5c1.2,0.1,3,1.5,3.4,2.8
c1.9,5.2,2.8,6.1,8.4,6.4c4.8,0.3,5,1.1,3.2,5.5c-2.6,6.4-9,8.9-13.1,13.7C52.7,632.4,51.8,632.3,50.6,632.4z"/>
<path d="M252.7,537.8c0,3,0.1,5.9,0,8.7c-0.2,4.1-6.5,9.8-10.6,9.6c-5.3-0.2-10,1.1-13.7,5.2c-2.5,2.7-2.9,2.1-5.4-0.4
c-3-2.8-6.5-5.6-10.2-6.8c-3.2-1-3.7-2.6-4.2-5c-1-5.5,1.2-10.1,3.9-14.6c3.4-5.6,3.4-5.6,8.1-0.9c1.1,1.1,2.3,2.2,3.6,3.2
c2.4,2,5,1.4,8,1.1C238.8,537.4,245.6,537.8,252.7,537.8z"/>
<path d="M184.4,556.6c3.2,2.6,3.7,5.5,3.4,8.7c-0.3,3.7-2.1,6.8-4.3,9.8c-5.9,8.3-11.2,16.9-17.2,25.1
c-3.9,5.4-8.4,10.5-12.8,15.5c-3.1,3.5-6.4,7-10,10.1c-1,0.9-3.6,1.4-4.6,0.8c-1.8-1.2-2-3-0.2-5.2c5.7-7.3,11.1-14.9,16.6-22.4
c4.7-6.4,10-12.5,14.2-19.3c3.4-5.4,8.5-9.6,9.8-16.4C179.9,561,182.5,559.1,184.4,556.6z"/>
<path d="M59.5,584.3c0.8,3.1,0.2,6-1.4,8.7c-2.6,0.4-5.3,0.8-7.9,1.2c-1,0.1-2,0.2-3.6,0.4c-0.3-0.5-0.9-1.4-1.6-2.4
c0,0-0.2,0-0.2,0l0.3,0c-2,0.5-4.1,0.9-6,1.5c-3.2,1-5.3-0.9-7.6-2.5c-1.5,3-3.2,3.3-5.2,1c0.5-2-0.4-3.1-2.2-3.8
c-0.1,0.1-0.2,0.1-0.3,0c-0.1-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.1-0.2,0-0.3c-0.2-0.5-0.4-1-0.6-1.6c1.9-2.1,3.1,0.4,4.6,0.6
c-0.1,0-0.1,0.1-0.2,0.1c0.1,0,0.1,0,0.2,0c-0.1,0-0.1-0.1-0.2-0.1c0.6-0.2,1.2-0.5,1.8-0.7c0.1,0.3,0.3,0.6,0.1,0.3
c0.3,0.2,0,0-0.3-0.2c5-2.3,10-4.8,15.8-2.4c0.3,0.1,0.9,0,1.2-0.2c2.6-1.9,5.5-0.1,8.2-0.6c0.2,0.2,0.3,0.3,0.5,0.5
c1.1-0.1,2.2-0.1,3.3-0.2l0.2-0.1l0-0.2C58.8,583.6,59.1,583.9,59.5,584.3z"/>
<path d="M224.8,523.1c1.6-4.2,0.9-10,6.1-13.2c0.9-0.6,2.2-1.1,3.2-0.9c6.9,1.6,12.1,8.9,8,16.2c-0.3,0.6-0.6,1.1-0.9,1.7
c-2.7,4.7-5.7,5.3-10,2c-0.8-0.7-2-1.2-3-1.3C225.1,527.1,224.8,526.8,224.8,523.1z"/>
<path d="M12.9,585.9c2-1.2,4-2.4,6.5-1c0.2,0.2,0.4,0.5,0.6,0.7c0.2,0.2,0.4,0.4,0.6,0.6c-1.3,1.2-2.8,2.4-3.9,3.8
c-0.3,0.4,0.2,1.4,0.3,2.2c-1.7,2.9-3.3-0.6-5-0.1c-0.1-0.2-0.2-0.4-0.3-0.5c-0.1-0.1-0.2-0.1-0.2-0.2c-0.1-0.1-0.1-0.2,0-0.3
c0-0.4,0-0.8,0-1.2c-0.2-0.7-0.5-1.5-0.7-2.2c0.1-0.1,0.1-0.2,0.2-0.3l0.2-0.1l0.1,0.1c0.4,0,0.8,0,1.1,0
c-0.1-0.5-0.2-0.9-0.2-1.4c0.2-0.1,0.5-0.2,0.7-0.3L12.9,585.9z"/>
<path d="M16.9,592.2c-0.1-0.7-0.6-1.8-0.3-2.2c1.2-1.4,2.6-2.5,3.9-3.8c0-0.2,0-0.4,0-0.6c0.2,0,0.4,0,0.6,0
c0.4,0.2,0.8,0.4,1.3,0.6c-0.2,0.5-0.4,1.1-0.6,1.6c-0.2,0.3-0.4,0.5-0.7,0.8c0,0.4,0,0.8,0,1.1l0.1,0.3l-0.2,0.2
c-0.2,0.2-0.4,0.3-0.7,0.5c0,0.3-0.1,0.6-0.1,0.9C19.3,591.8,18.1,592,16.9,592.2z"/>
<path d="M22,587.8c0.2-0.5,0.4-1.1,0.6-1.6c0.2,0,0.4,0,0.6,0c0.2,0.5,0.4,1,0.6,1.6l0.1,0.2l-0.1,0.1c0.1,0.1,0.1,0.2,0.2,0.2
c0.1,0.3,0.3,0.7,0.4,1c0.1,0.1,0.1,0.2,0.2,0.3c0,0.1,0.1,0.1,0,0.2c0,0.1-0.1,0.3-0.1,0.4c-0.1,0.2-0.2,0.5-0.2,0.7
c-0.1-0.1-0.3-0.2-0.4-0.2c-0.2,0.2-0.3,0.4-0.5,0.7c-0.1,0.1-0.2,0.2-0.2,0.2c-0.2,0.2-0.4,0.4-0.6,0.5l0.1-0.1
c-0.2,0.2-0.3,0.5-0.5,0.7c-0.5-0.4-1.1-0.8-1.6-1.2c0.3,0,0.5-0.1,0.8-0.1c0.2-0.2,0.5-0.4,0.7-0.6c0.2-0.2,0.3-0.4,0.5-0.6
c0.1-0.1,0.2-0.2,0.2-0.2c0-0.3,0-0.7,0-1c-0.1-0.1-0.1-0.2-0.2-0.3C22.3,588.5,22.1,588.1,22,587.8z"/>
<path d="M7.5,586.1c0.5,0.1,0.9,0.2,1.4,0.3l-0.1-0.1c0.5,0,0.9,0,1.4,0l-0.1,0c0.2,0,0.5,0,0.7,0l-0.1-0.1
c0,0.4,0.1,0.8,0.1,1.2c-0.1,0.1-0.1,0.2-0.2,0.3c0.1,0.8,0.1,1.7,0.2,2.5c-0.4,0-0.8,0-1.3,0.1c-0.1-0.1-0.2-0.2-0.2-0.2
c-0.1-0.4-0.3-0.7-0.4-1.1l-0.2-0.2c-0.2-0.1-0.3-0.2-0.4-0.4c-0.1-0.1-0.1-0.2-0.2-0.2c-0.2-0.1-0.3-0.2-0.4-0.4
c-0.1-0.1-0.2-0.2-0.2-0.2c0-0.1-0.1-0.1,0-0.2c0-0.1,0.1-0.3,0.1-0.4C7.6,586.6,7.6,586.3,7.5,586.1z"/>
<path d="M3,585.6c0.6,0,1.2-0.1,1.8-0.1c0.1,0.5,0.2,1,0.3,1.5l0-0.1c0.2,0.2,0.5,0.5,0.7,0.7l0-0.1c-0.3,2.3-1.9,0-2.6,0.7
c-0.2-0.2-0.4-0.5-0.7-0.7l0,0.1C2.6,587,2.8,586.3,3,585.6z"/>
<path d="M24.3,588.3c1.7,0.7,2.7,1.8,2.2,3.8c-0.3,0-0.7,0-1,0.1c-0.1-0.2-0.1-0.4-0.2-0.6c-0.1-0.1-0.2-0.1-0.2-0.2
c0.1-0.2,0.2-0.4,0.3-0.6c-0.2,0-0.3-0.1-0.5-0.1c0.2-0.1,0.3-0.3,0.5-0.4c-0.2-0.2-0.5-0.4-0.7-0.6c-0.1-0.1-0.1-0.2-0.2-0.3
C24.3,589.1,24.3,588.7,24.3,588.3z"/>
<path d="M8.3,588.9c-0.9-0.4-1.7-0.9-2.6-1.3l0,0.1c-0.2-0.2-0.5-0.5-0.7-0.7c0,0,0,0.1,0,0.1c-0.1-0.5-0.3-1-0.4-1.5
c0.4,0,0.8,0.1,1.2,0.1c0.4,0.5,0.8,0.9,1.1,1.4c0.2,0.2,0.4,0.3,0.6,0.5c0.1,0.1,0.2,0.2,0.2,0.2c0.2,0.1,0.3,0.2,0.4,0.4
c0.1,0.1,0.1,0.2,0.2,0.2C8.5,588.6,8.4,588.8,8.3,588.9L8.3,588.9z"/>
<path d="M8.9,586.4c0.6-2,1.8-2.2,3.4-1c-0.2,0.2-0.4,0.5-0.7,0.8c-0.1,0.1-0.1,0.2-0.2,0.2c-0.2,0.1-0.4,0-0.6-0.2l0.1,0.1
c-0.1-0.2-0.2-0.3-0.3-0.5c-0.2,0.2-0.3,0.3-0.5,0.5l0.1,0C9.8,586.3,9.3,586.3,8.9,586.4L8.9,586.4z"/>
<path d="M69,594.2c0.4,0,0.7,0,1.1,0c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.1,0.1,0.3,0,0.4
c-0.1,0.1-0.2,0.2-0.2,0.2c-0.3,0.1-0.7,0.3-1,0.4c-0.1,0.1-0.2,0.1-0.2,0.2c-0.2,0-0.4,0-0.6,0c-0.3-0.7-0.6-1.3-0.9-2
c0.4,0,0.8,0,1.1,0l0.1,0.1L69,594.2z"/>
<path d="M0.8,586.2c0.3,0,0.6,0,0.9,0c0.2,0.5,0.4,0.9,0.7,1.4l0-0.1c0,0.2,0,0.4,0,0.7c-0.6-0.4-1.2-0.8-1.8-1.2
C0.7,586.7,0.8,586.5,0.8,586.2z"/>
<path class="st2" d="M2.5,587.7c-0.2-0.5-0.4-0.9-0.7-1.4l-0.1,0.1c0.3-0.2,0.6-0.5,0.8-0.7c0.1,0,0.3,0,0.4,0
C2.8,586.3,2.6,587,2.5,587.7z"/>
<path d="M9.1,591.5c-1.7,0.4-1.3-0.5-0.8-1.4c0.4,0,0.8-0.1,1.2-0.1c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.2,0,0.4-0.2,0.6l0.1-0.1
C9.4,591,9.3,591.3,9.1,591.5z"/>
<path class="st2" d="M29.3,586.4c0.3,0.2,0.5,0.3,0.3,0.2c0.1,0.3,0,0-0.1-0.3L29.3,586.4z"/>
<path class="st2" d="M6.9,587c-0.4-0.5-0.8-0.9-1.1-1.4c0.6,0.2,1.2,0.3,1.8,0.5c0,0,0,0.2,0,0.2C7.4,586.5,7.2,586.7,6.9,587
L6.9,587z"/>
<path class="st2" d="M9.5,590.1c-0.4,0-0.8,0.1-1.2,0.1c0-0.2,0-0.4,0-0.6c0.3-0.2,0.5-0.4,0.8-0.6
C9.2,589.4,9.3,589.7,9.5,590.1z"/>
<path d="M12.1,592.1c-0.7-0.2-1.3-0.3-2-0.5l0.2-0.2c0.4,0,0.7,0,1.1,0c0.1,0.1,0.2,0.1,0.2,0.2
C11.8,591.8,11.9,591.9,12.1,592.1z"/>
<path class="st2" d="M27.6,586.9c0.1,0,0.1,0.1,0.2,0.1c-0.1,0-0.1,0-0.2,0c0.1,0,0.1-0.1,0.2-0.1L27.6,586.9z"/>
<path d="M129.5,594.1c0-0.5,0.1-1,0.1-1.6l0.2,0l0.2,0c0,0.5,0.1,1,0.1,1.6C129.9,594.1,129.7,594.1,129.5,594.1z"/>
<path class="st2" d="M12.2,586.1c0.1,0.5,0.2,0.9,0.2,1.4c-0.1-0.4-0.1-0.8-0.2-1.2l0.1-0.1L12.2,586.1z"/>
<path class="st2" d="M11.6,586.2c0.2-0.3,0.4-0.5,0.7-0.8c0,0.3,0,0.5,0,0.8l-0.1,0.1C12,586.1,11.8,586.1,11.6,586.2z"/>
<path class="st2" d="M80.2,582.9c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0-0.1-0.2-0.1-0.2c0-0.1,0.1-0.1,0.2-0.2
C80.1,582.7,80.1,582.8,80.2,582.9z"/>
<path class="st2" d="M119.1,594.8c-0.1,0.1-0.2,0.2-0.2,0.3C118.9,595,119,594.9,119.1,594.8C119,594.8,119.1,594.8,119.1,594.8z
"/>
<path class="st2" d="M4.6,585.5c0.1,0.5,0.3,1,0.4,1.5C4.9,586.5,4.8,586,4.6,585.5C4.7,585.5,4.6,585.5,4.6,585.5z"/>
<path class="st2" d="M70.1,597.3l-0.1-0.1C70,597.2,70.1,597.3,70.1,597.3z"/>
<path class="st2" d="M25.3,591.6c0.1,0.2,0.1,0.4,0.2,0.6l0.1-0.1C25.4,592,25.3,591.8,25.3,591.6z"/>
<path d="M25.3,591.6c0.1,0.2,0.1,0.4,0.2,0.6c-0.5,0-0.9,0.1-1.4,0.1c0.1-0.3,0.2-0.5,0.3-0.8c0.2,0,0.4-0.1,0.6-0.1
C25.1,591.4,25.2,591.5,25.3,591.6z"/>
<path class="st2" d="M81.7,582.5l0,0.3l-0.2,0.1C81.6,582.8,81.7,582.7,81.7,582.5z"/>
<path class="st2" d="M24.4,591.5c-0.1,0.3-0.2,0.5-0.3,0.8l0.1-0.1c-0.1-0.2-0.2-0.5-0.3-0.7l-0.1,0.1c0.2,0,0.5,0,0.7,0
L24.4,591.5z"/>
<path d="M23.9,591.5c0.1,0.2,0.2,0.5,0.3,0.7c-0.3,0-0.6,0.1-0.9,0.1c-0.1-0.1-0.2-0.2-0.2-0.2c-0.1-0.1-0.1-0.3,0-0.4
c0.1-0.1,0.2-0.2,0.2-0.2C23.5,591.4,23.7,591.4,23.9,591.5z"/>
<path class="st2" d="M21.3,591.5c-0.3,0-0.5,0-0.8,0.1c0,0,0.1,0.1,0.1,0.1c0,0,0-0.1,0-0.1C20.8,591.5,21,591.5,21.3,591.5
L21.3,591.5z"/>
<path class="st2" d="M12.1,592.1c-0.2-0.2-0.3-0.3-0.5-0.5c0.1,0.2,0.2,0.4,0.3,0.5C12,592.1,12.1,592.1,12.1,592.1z"/>
<path class="st2" d="M68.5,596.2c0.2,0,0.4,0,0.6,0c-0.1,0.2-0.2,0.4-0.4,0.4C68.7,596.4,68.6,596.3,68.5,596.2z"/>
<path class="st2" d="M45.2,592.2l-0.3,0c0,0,0.2,0,0.2,0C45.1,592.2,45.2,592.2,45.2,592.2z"/>
<path class="st2" d="M22.1,592.8c0.2-0.2,0.3-0.5,0.5-0.7c-0.1,0.2-0.1,0.5-0.2,0.7L22.1,592.8z"/>
<path d="M22.4,592.8c0.1-0.2,0.1-0.5,0.2-0.7l-0.1,0.1l0.3-0.2l0.3,0c0.1,0.1,0.2,0.2,0.2,0.2C23,592.4,22.7,592.6,22.4,592.8z"
/>
<path class="st2" d="M125.1,594.6c0.1-0.2,0.3-0.3,0.5-0.3C125.4,594.4,125.3,594.5,125.1,594.6z"/>
<polygon class="st2" points="119.1,594.8 119.1,594.7 119.2,594.8 119.1,594.8 119,594.8 "/>
<path class="st2" d="M120.3,594c0,0-0.1,0.1-0.1,0.1L120.3,594z"/>
<polygon class="st2" points="126.5,594.2 126.6,594.1 126.4,594.2 "/>
<path class="st2" d="M124.9,594.1l-0.2,0.1C124.7,594.2,124.8,594.2,124.9,594.1C124.8,594.2,124.9,594.1,124.9,594.1z"/>
<path class="st2" d="M121.3,594L121.3,594C121.2,593.9,121.3,594,121.3,594z"/>
<path class="st2" d="M7.5,586.1c0,0.3,0.1,0.5,0.1,0.8l0.1,0.1c0-0.2,0-0.5,0-0.7C7.7,586.3,7.6,586.1,7.5,586.1L7.5,586.1z"/>
<path class="st2" d="M0.8,586.2c-0.1,0.3-0.2,0.5-0.2,0.8c0,0-0.1,0-0.1,0C0.6,586.8,0.8,586.5,0.8,586.2L0.8,586.2z"/>
<path d="M0.9,586.3c-0.1,0.2-0.2,0.5-0.3,0.7c-0.2-0.2-0.4-0.4-0.5-0.5C0.3,586.4,0.6,586.3,0.9,586.3z"/>
<path class="st2" d="M12.9,585.9l0.1-0.1C12.9,585.8,12.9,585.9,12.9,585.9z"/>
<path d="M2.6,585.6c-0.3,0.2-0.6,0.5-0.8,0.7C2,586.1,2.3,585.9,2.6,585.6z"/>
<path d="M21.3,585.7c-0.2,0-0.4,0-0.6,0l-0.2-0.2c-0.1-0.2,0-0.4,0.2-0.5l-0.1,0.1C20.8,585.2,21.1,585.4,21.3,585.7z"/>
<path d="M20,585.7c-0.2-0.2-0.4-0.5-0.6-0.7c0.2,0.1,0.4,0.1,0.6,0.1l-0.1-0.1c0.2,0.1,0.3,0.3,0.2,0.5L20,585.7z"/>
<path d="M20,585c0.1-0.2,0.3-0.4,0.4-0.5c0.1,0.2,0.1,0.4,0.2,0.5l0.1-0.1C20.4,585,20.1,585,20,585L20,585z"/>
<path class="st2" d="M59.6,583.8C59.6,583.8,59.7,583.7,59.6,583.8L59.6,583.8z"/>
<path class="st2" d="M81.4,583c-0.2,0-0.3,0-0.5,0C81.1,583,81.2,583,81.4,583z"/>
<path class="st2" d="M58.4,583.2l0,0.2l-0.2,0.1C58.3,583.4,58.4,583.3,58.4,583.2z"/>
<path class="st2" d="M55,583.7c-0.2-0.2-0.3-0.3-0.5-0.5C54.6,583.4,54.8,583.5,55,583.7z"/>
<path class="st2" d="M20.5,591.6c0-0.3,0.1-0.6,0.1-0.9l0,0.1c0,0.2,0,0.5,0,0.7L20.5,591.6L20.5,591.6z"/>
<path d="M10.1,591.6c-0.2,0-0.5-0.1-0.7-0.1c0.1-0.2,0.1-0.5,0.2-0.7l-0.1,0.1c0.3,0.2,0.5,0.3,0.8,0.5L10.1,591.6z"/>
<path class="st2" d="M9.6,590.8c-0.1,0.2-0.1,0.5-0.2,0.7l-0.3,0C9.3,591.3,9.4,591,9.6,590.8z"/>
<path d="M9,589c-0.3,0.2-0.5,0.4-0.8,0.6c0-0.2,0-0.5,0-0.7l-0.1,0.1l0.2-0.2l0.3,0L9,589z"/>
<path class="st2" d="M2.4,588.2c0-0.2,0-0.4,0-0.7c0.2,0.2,0.4,0.5,0.7,0.7C2.8,588.2,2.6,588.2,2.4,588.2z"/>
<path class="st2" d="M69.3,595.9c0.3-0.1,0.7-0.3,1-0.4C70,595.6,69.7,595.8,69.3,595.9z"/>
<path class="st2" d="M70.6,595.2c0.1-0.1,0.1-0.3,0-0.4l-0.1,0.2L70.6,595.2z"/>
<path class="st2" d="M130,592.6l-0.2,0l-0.2,0C129.8,592.4,129.9,592.4,130,592.6z"/>
<path class="st2" d="M70.4,594.6c-0.1-0.2-0.2-0.3-0.3-0.4C70.2,594.4,70.3,594.5,70.4,594.6z"/>
<polygon class="st2" points="69,594.2 68.9,594.3 68.8,594.2 "/>
<path class="st2" d="M24.3,588.3c0,0.4,0.1,0.7,0.1,1.1c-0.1-0.3-0.3-0.7-0.4-1C24.1,588.5,24.2,588.5,24.3,588.3z"/>
<path class="st2" d="M23.7,588.1l0.1-0.1l-0.1-0.2C23.6,587.9,23.6,588,23.7,588.1z"/>
<path class="st2" d="M10.9,590.2c-0.1-0.8-0.1-1.7-0.2-2.5c0.2,0.7,0.5,1.5,0.7,2.2c-0.2,0.1-0.4,0.2-0.6,0.2L10.9,590.2z"/>
<path class="st2" d="M10.3,591.4c-0.3-0.2-0.5-0.3-0.8-0.5c0.2-0.1,0.3-0.3,0.2-0.6c0.4,0,0.8,0,1.3-0.1l-0.1-0.1
c0.2,0.3,0.4,0.6,0.6,0.9c-0.1,0.1-0.1,0.2,0,0.3C11,591.4,10.7,591.4,10.3,591.4z"/>
<path d="M11.6,586.2c0.2-0.1,0.4,0,0.6,0.1c0.1,0.4,0.1,0.8,0.2,1.2c-0.4,0-0.8,0-1.1,0c0-0.4,0.1-0.7,0.1-1.1
C11.5,586.3,11.6,586.3,11.6,586.2z"/>
<path class="st2" d="M11.4,586.4c0,0.4-0.1,0.7-0.1,1.1l-0.1-0.1l-0.2,0.1c0-0.4-0.1-0.8-0.1-1.2C11,586.5,11.2,586.5,11.4,586.4
z"/>
<path d="M20.6,585.7c0,0.2,0,0.4,0,0.6c-0.2-0.2-0.4-0.4-0.6-0.6l0.1-0.2l0.2,0l0.2,0L20.6,585.7z"/>
<path d="M11.4,591.1c-0.2-0.3-0.4-0.6-0.6-0.9c0.2-0.1,0.4-0.2,0.6-0.2C11.4,590.3,11.4,590.7,11.4,591.1z"/>
<path class="st2" d="M22,587.8c0.2,0.3,0.3,0.6,0.5,0.9c-0.4,0-0.7-0.1-1.1-0.1C21.5,588.4,21.8,588.1,22,587.8z"/>
<path d="M21.3,588.6c0.4,0,0.7,0.1,1.1,0.1c0.1,0.1,0.1,0.2,0.2,0.3c0,0.3,0,0.7,0,1c-0.1,0.1-0.2,0.2-0.2,0.2
c-0.2,0-0.4-0.1-0.6-0.1c-0.2-0.1-0.3-0.3-0.5-0.4C21.3,589.4,21.3,589,21.3,588.6z"/>
<path class="st2" d="M20.6,590.7c0.2-0.2,0.4-0.3,0.7-0.5l0-0.1c0,0.2,0,0.5,0,0.7l0.1-0.1C21,590.8,20.8,590.8,20.6,590.7
L20.6,590.7z"/>
<path class="st2" d="M21.3,589.8c0.2,0.1,0.3,0.3,0.5,0.4l0.1-0.1c-0.2,0-0.5,0-0.7,0l0,0.1l0.2-0.2L21.3,589.8z"/>
<path class="st2" d="M22.6,590.1c0-0.3,0-0.7,0-1C22.6,589.4,22.6,589.7,22.6,590.1z"/>
<path class="st2" d="M23.1,592l-0.3,0l-0.3,0.2c0.2-0.2,0.4-0.4,0.6-0.5C23,591.7,23,591.9,23.1,592z"/>
<path class="st2" d="M23.9,591.5c-0.2,0-0.4-0.1-0.6-0.1c0.2-0.2,0.3-0.4,0.5-0.7l0,0.1c0,0.2,0,0.5,0,0.7L23.9,591.5z"/>
<path class="st2" d="M21.9,590.9c-0.2,0.2-0.5,0.4-0.7,0.6c0,0,0,0,0,0c0-0.2,0-0.5,0-0.7l-0.1,0.1
C21.4,590.9,21.7,590.9,21.9,590.9L21.9,590.9z"/>
<path class="st2" d="M23.8,590.7c0.1,0.1,0.3,0.2,0.4,0.2c0.1-0.2,0.2-0.5,0.2-0.7l-0.1-0.1c0,0.2,0,0.5,0,0.7l0.1-0.1
C24.3,590.8,24,590.8,23.8,590.7L23.8,590.7z"/>
<path class="st2" d="M21.8,590.2c0.2,0,0.4,0.1,0.6,0.1c-0.2,0.2-0.3,0.4-0.5,0.6c0,0,0,0,0,0c0-0.2,0-0.5,0-0.7L21.8,590.2z"/>
<path class="st2" d="M24.6,589.7c0.2,0.2,0.5,0.4,0.7,0.6l-0.1-0.1c-0.2,0-0.5,0-0.7,0l0.1,0.1c0.1-0.1,0.1-0.2,0.1-0.4
C24.7,589.8,24.6,589.7,24.6,589.7z"/>
<path class="st2" d="M8.9,586.3c0.5,0,0.9,0,1.4,0C9.8,586.3,9.3,586.3,8.9,586.3z"/>
<path class="st2" d="M7.5,587.5c-0.2-0.2-0.4-0.3-0.6-0.5c0,0,0,0,0,0c0.2,0,0.5,0,0.7,0l-0.1-0.1c0,0.1-0.1,0.3-0.1,0.4
C7.5,587.3,7.5,587.4,7.5,587.5z"/>
<path class="st2" d="M10.2,586.3c0.2-0.2,0.3-0.3,0.5-0.5c0.1,0.2,0.2,0.3,0.3,0.5C10.7,586.3,10.4,586.3,10.2,586.3z"/>
<path class="st2" d="M8.8,588.8l-0.3,0l-0.2,0.2c0.2-0.1,0.3-0.3,0.1-0.6C8.5,588.6,8.6,588.7,8.8,588.8z"/>
<path class="st2" d="M8.2,588.1c-0.1-0.2-0.2-0.3-0.4-0.4C7.8,587.9,8,588,8.2,588.1z"/>
<path class="st2" d="M5,586.9c0.2,0.2,0.5,0.5,0.7,0.7C5.5,587.4,5.2,587.2,5,586.9z"/>
<path class="st2" d="M25,591.4c-0.2,0-0.4,0.1-0.6,0.1l0.1,0.1c0-0.2,0-0.5,0-0.7l-0.1,0.1c0.2,0,0.5,0,0.7,0l0.1-0.1
C25.2,591,25.1,591.2,25,591.4z"/>
<path class="st2" d="M25.3,590.3c-0.2,0.1-0.3,0.3-0.5,0.4c0.2,0,0.3,0.1,0.5,0.1c0,0-0.1,0.1-0.1,0.1c0-0.2,0-0.5,0-0.7
L25.3,590.3z"/>
<path d="M7.7,587c-0.2,0-0.5,0-0.7,0c0.2-0.2,0.5-0.5,0.7-0.7C7.7,586.5,7.7,586.7,7.7,587z"/>
<path d="M24.5,590.8c0,0.2,0,0.5,0,0.7c-0.2,0-0.5,0-0.7,0c0-0.2,0-0.5,0-0.7C24,590.8,24.3,590.8,24.5,590.8z"/>
<path d="M21.3,590.8c0,0.2,0,0.5,0,0.7c-0.2,0-0.5,0-0.7,0c0-0.2,0-0.5,0-0.7C20.8,590.8,21,590.8,21.3,590.8z"/>
<path class="st2" d="M20.4,585.5l-0.2,0l-0.2,0c0.1-0.2,0-0.4-0.2-0.5c0.2,0,0.5,0,0.7,0C20.4,585.1,20.4,585.3,20.4,585.5z"/>
<path d="M21.9,590.1c0,0.2,0,0.5,0,0.7c-0.2,0-0.5,0-0.7,0c0-0.2,0-0.5,0-0.7C21.4,590.1,21.7,590.1,21.9,590.1z"/>
<path d="M25.2,590.1c0,0.2,0,0.5,0,0.7c-0.2,0-0.5,0-0.7,0c0-0.2,0-0.5,0-0.7C24.7,590.1,24.9,590.1,25.2,590.1z"/>
</g>
</g>
<g>
<g id="XMLID_4_">
<path d="M496.3,525.4c2.1,0.2,2.9,1.8,1.9,3.6c-1.1,1.9-2.6,3.6-3.9,5.5c-0.7,1.1-0.9,2.9-1.9,3.5c-2.3,1.3-4.9,2.1-7.5,3
c-0.4,0.1-1.3-0.5-1.5-1c-0.9-2.1-2.9-2.4-4.7-2.8c-3.7-0.8-4.9-2.2-5-6.1c-0.1-4,1.6-7.4,3-11c2.1-5,5-9.3,9.8-11.9
c1.1-0.6,3.6,0.2,4.8,1.2c0.7,0.6,0.8,2.8,0.3,4c-0.5,1.5-1.9,2.6-2.9,3.9c-0.6,0.8-1.4,1.5-1.8,2.5c-0.5,1.3-1.5,3.2-0.9,4
c0.8,1.2,2.7,1.6,4.2,2.3c0.2,0.1,0.5-0.1,1.3-0.3C492.6,525.6,494.5,525.2,496.3,525.4z"/>
<path d="M486.7,543.3c0.4-0.7,1-1.6,1.6-1.6c0.8,0,1.9,0.5,2.2,1.2c0.7,1.4,1.6,3.1,1.2,4.5c-1.2,4.9-0.2,9.8,0.5,14.5
c0.7,5.6-1.1,10.8-1.6,16.1c-0.1,1.7,0.2,3.4-0.1,5c-0.7,3.5,0.7,6.9,0.6,10.3c0,3-2.1,6-2.8,9c-0.6,2.8-1.8,4.9-4.1,6.6
c-3.9-2.3-4.3-4.4-2.9-8.7c0.7-2.1,0.5-4.6,0.2-6.8c-0.3-2.2-0.2-4.1,0.8-6.2c0.8-1.4,0.8-3.3,1-5c0.5-4.4,1-8.9,1.2-13.4
c0.1-2.4-1-4.9-0.5-7.1C485.6,555.8,483.3,549.1,486.7,543.3z"/>
<path d="M461.6,573.6c2.1,2.4,1.6,5.1,0.8,7.8c-2.6,8.1-4.9,16.4-7.9,24.4c-1.2,3.3-3.3,6.8-6.1,8.8c-3.1,2.3-7.3,3.1-11.1,4.3
c-0.7,0.2-1.7-0.9-2.6-1.4c-1-0.8-2-1.6-3-2.4c2.2-1.4,4.6-2.6,6.7-4.2c2.7-1.9,5-4.4,7.7-6.2c4.1-2.7,5.4-7.1,7.1-11.2
c0.8-1.9,0.1-4.3-0.1-6.5c-0.1-2-0.4-3.9,1.2-5.6c0.7-0.7,0.8-2,1-3C456.4,574.3,457.4,573.5,461.6,573.6z"/>
<path d="M449.7,544.7c1.4,0.8,2,3.1,3,5c-1.2,2.5-2.2,4.6-3.3,6.6c-1.2,2.2-2.7,4.2-3.6,6.5c-1.3,3.3-6.2,4.6-8.8,2.1
c-0.5-0.5-1.8-0.9-2.4-0.6c-2.6,1.1-5.2,2.2-7.5,3.8c-2.4,1.6-3,1.4-4.4-1c-0.7-1.2-2.3-1.9-3.5-2.8c-1.8-1.4-3.6-2.8-5.4-4.3
c-0.4-0.3-0.7-1-0.7-1.6c0.1-2.6,0.5-5.1,0.6-7.6c0.2-2.7,1.5-4.6,3.8-5.9c0.4-0.2,0.4-1.1,0.7-1.6c0.6-0.8,1.2-2,2-2.2
c0.9-0.2,2.1,0.4,2.9,1c0.9,0.7,1.2,2.1,2.1,2.8c1.7,1.4,2.9,3.3,6,2.1c2.1-0.8,5,0.7,7.5,0.5c2-0.1,3.9-1.2,5.9-1.7
C446.5,545.3,448.6,544,449.7,544.7z"/>
<path d="M446.3,521.3c2.6,0.2,2.8,1.9,3.1,4.4c-0.8,1.8-1.5,4.3-2.9,6.3c-1.8,2.8-4.1,5.2-6.2,7.7c-1,1.3-2,1.6-3.6,0.5
c-2.4-1.6-5.2-2.8-7.8-3.9c-1.9-0.8-3-2.7-1.8-4.1c2-2.6,2.6-5.6,3.6-8.5c0.7-1.9,1.7-3.8,2.9-5.5c1-1.4,2.1-1.9,3.8-0.2
C439.7,520.4,443.1,521,446.3,521.3z"/>
<path d="M430.4,617.8c0.3-1,0.9-1.8,1.4-2.7c1,0.8,2,1.6,3,2.4c-0.9,0.5-1.7,1.2-2.7,1.4C431.6,618.9,430.3,618,430.4,617.8z"/>
<path d="M413.4,612.1c0.5,4.4-1,8.2-4,11.4c-1.1,1.2-2.3,2.3-3.3,3.7c-1.8,2.6-2,2.8-5.4,3c-2.4-5.7-8.2-6.7-12.5-2.5
c-2.8,2.8-2.7,2.6-5.4-0.3c-1.4-1.5-3.5-2.5-5.4-3.2c-3.1-1.1-4.4-3-3.7-6.4c0.8-3.6,1.6-7.1,4.9-9.5c0.7-0.5,0.9-1.8,1.4-2.6
c1.8-3,4.4-3.2,6.4-0.3c1.6,2.3,3.7,2.8,6.5,3c3.5,0.2,6.2-0.8,8.8-2.9c1.3-1.1,2-0.5,3.5,0.4c1.9,1.2,2.8,4.7,6.2,3.7
C411.8,609.6,413.3,611.2,413.4,612.1z"/>
<path d="M394.4,523.7c2.1,0.4,4.1,1.7,4,3.8c-0.1,0.6-0.2,1.7-0.7,2.7c-1.8,4.2-3.7,8.4-6.8,11.9c-2.3,2.6-4.1,2.8-6.7,0.6
c-1.3-1.1-2.7-2-4.2-2.5c-2.1-0.8-2.8-2.1-2-4c1.4-3.6,2.9-7.2,4.6-10.7c0.7-1.4,1.8-2.8,3-3.9c1.2-1,2.4-1.1,3.9,0.1
C390.7,522.9,392.7,523.4,394.4,523.7z"/>
<path d="M360.3,584.7c13.7-0.9,16.4-2.3,16.4-2.3c2.6-1.1,3-2.6,2.1-5.4c-0.5-1.6-0.7-3.6-0.2-5.2c1.3-4,3-7.8,4.6-11.7
c0.8-2,0.8-4.5,3.1-5.7c1.3-0.6,2.8-1.6,4.1-1.4c2.6,0.2,5.2,0.9,7.7,1.7c2.4,0.7,2.9,3,3.3,5.2c0.2,1,0.2,2.1,0,3.1
c-1.4,5.4,0,11.4-3.6,16.2c-0.2,0.2,0,0.7-0.1,1.2c3.2-0.9,6.4-1.4,9.3-2.7c2.9-1.3,5.4-3.3,8.5-5.2c0.7,1.6,1.5,3.4,2.2,5.1
c0.9-1.2,2.1-2.9,3.1-4.2c2.3,1.9,4.1,3.3,5.9,4.7c0.2,0.1,0.3,0.2,0.5,0.4c1.3,0.7,2.6,1.2,3.7,2c2.8,2.1,4,1.7,5-1.5
c0.6-2,1.9-3.8,3.2-5.7c2.2,2.5,3.4,5,3.2,7.9c-0.2,3.9-0.6,7.7-1.1,11.5c-0.4,2.3-1,4.7-2,6.9c-1.6,3.2-3.7,3.1-6,0.2
c-1.9-2.3-4.1-4.4-6.3-6.4c-1-0.9-2.4-1.6-3.7-2.2c-1.8-0.9-2.9,0-3.6,1.7c-0.9,2.3-2,4.5-2.6,6.8c-0.6,2.1-2.1,2.3-3.4,1.7
c-0.9-0.4-1.5-1.9-1.9-3c-0.4-1.3-0.4-2.7-0.6-4.7c-4.1,1.1-7.7,2.1-11.3,3.1c-2.9,0.8-5.7,1.7-8.6,2.3c-0.6,0.1-1.8-0.7-2.2-1.4
c-1.5-2.4-2.7-2.9-5.4-1.8c-3.7,1.6-7.3,3.8-11.1,4.7l-7.3,0.4L360.3,584.7z"/>
<path d="M358.3,584.8l0.9,0C358.9,584.8,358.6,584.8,358.3,584.8z"/>
<path class="st2" d="M332.8,586.2v0.3l-0.2,0.1C332.6,586.5,332.7,586.4,332.8,586.2z"/>
<path class="st2" d="M331.1,586.3c0,0.1,0.1,0.2,0.1,0.3c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0-0.1-0.1-0.1-0.2
C330.9,586.4,331,586.3,331.1,586.3z"/>
<path class="st2" d="M321.6,598.6c0.1,0.1,0.1,0.3,0,0.4l-0.1-0.2L321.6,598.6z"/>
<path class="st2" d="M321.1,597.9c0.1,0.1,0.2,0.3,0.3,0.4C321.3,598.2,321.2,598.1,321.1,597.9z"/>
<path d="M310.7,587.5c3.3-3.3,7.6-1.7,11.4-2c2.9-0.2,5.9,0.5,8.9,0.8c-0.1,0-0.2,0.1-0.2,0.2c0,0.1,0,0.2,0.1,0.2
c0,0,0.2,0,0.2-0.1c0.2,0.1,0.5,0.1,0.7,0.2c0.2,0,0.3,0,0.5,0l0.1-0.1l0.2-0.1v-0.3c6.2-0.3,12.4-0.6,18.6-0.9
c3-0.2,6-0.2,9-0.6l4.9,16.5c-4,0.3-7.9,0.6-11.9,0.7c-3.1,0.1-6.1,0.2-9.2-0.1c-1.3-0.1-2.6-1-3.8-1.6c-0.3-0.1-0.6-0.2-0.9-0.2
c-4.3,0-8.6-0.2-13,0c-1.8,0-3.6,0.6-5.4,0.9l0.1,0.1c-0.5-0.2-0.9-0.5-1.4-0.7c0.2-0.1,0.3-0.2,0.4-0.5c0.1-0.1,0.2-0.1,0.2-0.2
c0.4-0.1,0.7-0.3,1-0.4c0.1-0.1,0.2-0.2,0.2-0.2c0.1-0.1,0.1-0.3,0-0.4c-0.1-0.1-0.1-0.2-0.2-0.2c-0.1-0.2-0.2-0.3-0.3-0.4
c-0.4,0-0.7,0-1.1,0h-0.2c-0.4,0-0.7,0-1.1,0c-2.4,0-4.8,0.1-7.2,0c-0.8,0-1.6-0.7-2.4-1.1c1.6-2.7,2.2-5.6,1.4-8.7
C310.7,587.9,310.7,587.7,310.7,587.5z"/>
<polygon class="st2" points="320,597.9 319.9,598 319.8,597.9 "/>
<path class="st2" d="M319.7,600.3c0-0.2-0.1-0.3-0.1-0.4c0.2,0,0.4,0,0.5,0C320.1,600.1,319.9,600.2,319.7,600.3z"/>
<path d="M320.1,599.9c-0.2,0-0.4,0-0.5,0c-0.3-0.7-0.6-1.3-0.9-2c0.4,0,0.8,0,1.1,0l0.1,0.1l0.1-0.1c0.4,0,0.7,0,1.1,0
c0.1,0.2,0.2,0.3,0.3,0.4c0.1,0.1,0.2,0.2,0.2,0.2l-0.1,0.2l0.1,0.2c-0.1,0.1-0.2,0.2-0.2,0.2c-0.3,0.1-0.7,0.3-1,0.4
C320.3,599.7,320.2,599.8,320.1,599.9z"/>
<path class="st2" d="M309.4,586.9l0,0.2l-0.2,0.1C309.4,587.1,309.4,587,309.4,586.9z"/>
<path d="M296.1,596c0.2,0.4,0.5,0.7,0.7,1C296.6,596.7,296.3,596.3,296.1,596z"/>
<path d="M296.2,595.9c0,0-0.1,0-0.1,0v0L296.2,595.9z"/>
<path d="M296.1,596L296.1,596C296.1,596,296.1,596,296.1,596L296.1,596z"/>
<path class="st2" d="M280.4,590.1c0,0,0.1,0,0.2-0.1c0,0.1,0.1,0.2,0.1,0.2C280.5,590.2,280.4,590.1,280.4,590.1z"/>
<path class="st2" d="M280.5,589.9C280.5,590,280.5,590,280.5,589.9c0,0.1-0.1,0.1-0.1,0.1L280.5,589.9z"/>
<path class="st2" d="M278.8,590.7c-0.1,0-0.1,0-0.2,0C278.7,590.7,278.7,590.7,278.8,590.7C278.8,590.7,278.8,590.7,278.8,590.7z
"/>
<path class="st2" d="M278.8,590.6L278.8,590.6C278.8,590.6,278.8,590.7,278.8,590.6c-0.1,0-0.1,0-0.1,0H278.8z"/>
<path d="M278.7,590.6C278.8,590.6,278.8,590.6,278.7,590.6L278.7,590.6C278.7,590.6,278.7,590.6,278.7,590.6z"/>
<path class="st2" d="M276.5,595.9L276.5,595.9C276.5,595.9,276.5,595.9,276.5,595.9C276.5,595.9,276.5,595.9,276.5,595.9z"/>
<path d="M274.8,591.6c-0.2-0.5-0.4-1-0.6-1.6c1.8-2,3,0.3,4.5,0.6c0,0,0,0-0.1,0c0,0,0,0,0.1,0c0,0-0.1,0-0.1,0.1
c0.1,0,0.1,0,0.2,0c0,0-0.1,0-0.1-0.1c0,0,0,0,0.1,0h0c0,0,0,0-0.1,0c0.6-0.2,1.2-0.4,1.7-0.7l-0.1,0.1c0.1,0,0.2,0.1,0.2,0.1
c0-0.1-0.1-0.1-0.1-0.2c5-2.3,9.9-4.7,15.6-2.3c0.3,0.1,0.9,0,1.2-0.2c2.6-1.9,5.5-0.1,8.2-0.6c0,0,0.1,0.1,0.1,0.1
c0.1,0.1,0.2,0.2,0.4,0.4c1.1-0.1,2.2-0.1,3.3-0.2l0.2-0.1l0-0.2c0.4,0.4,0.7,0.8,1.1,1.1c0.8,3.1,0.2,6-1.4,8.7
c-2.6,0.4-5.3,0.8-7.9,1.2c-1,0.1-2,0.2-3.6,0.4c-0.2-0.3-0.5-0.8-0.9-1.3c-0.2-0.3-0.5-0.7-0.7-1c0,0,0.1,0,0.1,0l-0.1,0h0
c0,0,0,0,0,0c-2,0.5-4,0.9-5.9,1.5c-3.2,1-5.3-0.9-7.5-2.5c-1.5,3-3.2,3.3-5.2,1c0.5-2-0.4-3.1-2.2-3.8c-0.1,0.1-0.2,0.1-0.3,0
c-0.1-0.1-0.1-0.2-0.2-0.2l0.1-0.1L274.8,591.6z"/>
<path d="M276.3,595.4c0.1,0.2,0.1,0.4,0.2,0.5c0,0,0,0-0.1,0C276.4,595.7,276.3,595.5,276.3,595.4z"/>
<path class="st2" d="M276.2,594.1c0-0.1,0-0.2,0-0.2l0.1,0.1C276.3,594,276.2,594.1,276.2,594.1z"/>
<path class="st2" d="M276.2,594.6c0,0,0-0.1,0-0.2c0,0,0.1,0,0.1,0L276.2,594.6z"/>
<path d="M276.2,594.1c0,0.1,0,0.2,0,0.3c-0.1,0-0.2-0.1-0.3-0.1C276,594.3,276.1,594.2,276.2,594.1z"/>
<path d="M275.5,594c0,0,0-0.1,0.1-0.1c0.2,0,0.4,0,0.6,0c0,0.1,0,0.2,0,0.2c-0.1,0.1-0.2,0.2-0.3,0.3c0.1,0,0.2,0,0.3,0.1
c0,0,0,0.1,0,0.2c-0.2,0-0.4,0-0.7,0c0,0,0,0,0-0.1c0,0,0,0-0.1,0c0-0.1,0-0.3,0-0.4C275.5,594.1,275.5,594,275.5,594z"/>
<path d="M275.6,593.4c-0.1-0.1-0.2-0.2-0.2-0.2c0-0.4-0.1-0.7-0.1-1.1c1.7,0.7,2.7,1.9,2.2,3.8c-0.3,0-0.7,0-1,0.1l0.1-0.1
c-0.1-0.2-0.2-0.3-0.2-0.5c0,0,0,0,0,0c-0.1-0.1-0.2-0.2-0.2-0.2c0.1-0.2,0.2-0.4,0.3-0.6c0,0-0.1,0-0.1,0c0-0.1,0-0.2,0-0.3
c0,0,0.1-0.1,0.1-0.1l-0.1-0.1C276,593.7,275.8,593.5,275.6,593.4z"/>
<path class="st2" d="M275.6,593.4c0.2,0.2,0.4,0.3,0.6,0.5c-0.2,0-0.4,0-0.6,0c0-0.1,0.1-0.2,0.1-0.3
C275.7,593.5,275.6,593.5,275.6,593.4z"/>
<path class="st2" d="M276,595.1c-0.2,0-0.3,0-0.5,0.1c0-0.2,0-0.4,0-0.6c0.2,0,0.4,0,0.7,0l0.1-0.1
C276.2,594.7,276.1,594.9,276,595.1z"/>
<path d="M275.5,595.2C275.5,595.2,275.5,595.2,275.5,595.2l-0.1,0C275.5,595.2,275.5,595.2,275.5,595.2z"/>
<path d="M275.5,594.5C275.5,594.6,275.5,594.6,275.5,594.5C275.5,594.6,275.5,594.6,275.5,594.5L275.5,594.5z"/>
<path d="M275.5,594.5L275.5,594.5C275.5,594.6,275.5,594.6,275.5,594.5C275.5,594.5,275.5,594.5,275.5,594.5z"/>
<path d="M276.5,595.9c-0.4,0-0.9,0.1-1.3,0.1l0.1-0.1c0,0,0,0,0,0c0.1-0.2,0.1-0.4,0.2-0.6c0,0,0.1,0,0.1,0c0,0,0,0,0-0.1
c0.2,0,0.3-0.1,0.5-0.1c0.1,0.1,0.2,0.2,0.2,0.2c0,0,0,0,0,0C276.3,595.5,276.4,595.7,276.5,595.9z"/>
<path d="M275.5,595.3c0,0-0.1,0-0.1,0c0,0,0,0,0-0.1L275.5,595.3z"/>
<path d="M275.6,593.9c0,0,0,0.1-0.1,0.1l0-0.1v0C275.5,593.9,275.5,593.9,275.6,593.9z"/>
<path d="M275.5,594c0,0,0,0.1,0,0.1C275.5,594,275.5,594,275.5,594L275.5,594z"/>
<path class="st2" d="M275.3,594.5c0-0.1,0.1-0.3,0.1-0.4c0,0.1,0,0.3,0,0.4C275.4,594.5,275.4,594.5,275.3,594.5z"/>
<path d="M275.3,594.7c-0.1,0-0.2-0.1-0.3-0.2c0.1,0,0.2,0,0.3,0C275.3,594.6,275.3,594.6,275.3,594.7z"/>
<path class="st2" d="M275.2,595.8c-0.1-0.2-0.2-0.4-0.2-0.6c0.2,0,0.3,0,0.5,0C275.3,595.4,275.3,595.6,275.2,595.8z"/>
<path d="M275.2,595.8C275.2,595.8,275.2,595.9,275.2,595.8C275.2,595.9,275.2,595.9,275.2,595.8
C275.2,595.9,275.2,595.8,275.2,595.8z"/>
<path class="st2" d="M275.2,595.9C275.2,595.9,275.2,595.9,275.2,595.9L275.2,595.9C275.2,595.9,275.2,595.9,275.2,595.9z"/>
<path class="st2" d="M275.4,593.1c-0.1-0.4-0.3-0.7-0.4-1.1c0.1,0.1,0.2,0.1,0.3,0C275.3,592.4,275.4,592.8,275.4,593.1z"/>
<path d="M274.8,595.2c0-0.2,0-0.5,0-0.7c0.1,0,0.1,0,0.2,0c0.1,0.1,0.2,0.1,0.3,0.2c0,0,0-0.1,0-0.2c0,0,0,0,0,0c0,0,0.1,0,0.1,0
c0,0,0,0,0,0.1c0,0,0,0,0.1,0c0,0.2,0,0.4,0,0.6c0,0-0.1,0-0.1,0c0,0,0,0,0,0.1c-0.1,0-0.3,0-0.5,0c0,0,0,0,0-0.1h0
C274.9,595.2,274.8,595.2,274.8,595.2z"/>
<path d="M274.8,595.3l0.1-0.1h0c0,0,0,0,0,0.1C274.9,595.3,274.9,595.3,274.8,595.3z"/>
<path class="st2" d="M274.9,591.7l-0.1,0.1c-0.1-0.1-0.1-0.2,0-0.3L274.9,591.7z"/>
<path class="st2" d="M274.8,594.5L274.8,594.5c0.1-0.1,0.1,0,0.2,0C274.9,594.5,274.9,594.5,274.8,594.5z"/>
<path d="M274.9,595.2l-0.1,0.1c0,0,0,0,0-0.1C274.8,595.2,274.9,595.2,274.9,595.2z"/>
<path class="st2" d="M274.3,595.1c0.2-0.2,0.3-0.4,0.5-0.7l0,0.1c0,0.2,0,0.4,0,0.7C274.7,595.1,274.5,595.1,274.3,595.1z"/>
<path d="M274.3,595.1c0.2,0,0.3,0,0.5,0.1c0,0,0,0,0,0.1c0,0,0.1,0,0.2,0c0.1,0.2,0.2,0.4,0.2,0.6c0,0,0,0,0,0
c-0.3,0-0.6,0.1-0.9,0.1c-0.1-0.1-0.2-0.2-0.2-0.2c-0.1-0.1-0.1-0.3,0-0.4C274.2,595.3,274.3,595.2,274.3,595.1z"/>
<path class="st2" d="M273.8,595.7l-0.2,0.1c0.2-0.2,0.4-0.3,0.5-0.5c-0.1,0.1-0.1,0.2,0,0.4L273.8,595.7z"/>
<path d="M274.3,596c-0.3,0.2-0.6,0.4-0.9,0.6c0.1-0.2,0.1-0.5,0.2-0.7v0l0.2-0.1l0.3,0C274.2,595.8,274.3,595.9,274.3,596z"/>
<polygon class="st2" points="273.6,595.8 273.6,595.8 273.6,595.8 "/>
<path class="st2" d="M273.1,596.5c0.2-0.2,0.3-0.5,0.5-0.7h0c-0.1,0.2-0.1,0.5-0.2,0.7H273.1z"/>
<path class="st2" d="M273.4,594c-0.2,0.2-0.3,0.4-0.5,0.6c0-0.2,0-0.4,0-0.7C273.1,594,273.3,594,273.4,594z"/>
<path d="M272.4,593.5c0-0.4,0-0.8,0-1.1c0.4,0,0.7,0.1,1.1,0.1c0.1,0.1,0.1,0.2,0.2,0.3c0,0.3,0,0.7,0,1
c-0.1,0.1-0.1,0.2-0.2,0.2c-0.2,0-0.3-0.1-0.5-0.1c0,0,0,0,0-0.1c-0.1,0-0.1,0-0.2,0C272.7,593.7,272.5,593.6,272.4,593.5z"/>
<polygon points="273,594.6 273,594.6 273,594.6 "/>
<path d="M273,593.9l-0.1,0c0,0,0,0,0,0C272.9,593.9,272.9,593.9,273,593.9z"/>
<path d="M273,593.9C273,593.9,273,593.9,273,593.9c0,0.1-0.1,0-0.1,0L273,593.9z"/>
<path class="st2" d="M272.4,592.4c0.2-0.3,0.4-0.5,0.7-0.8c0.2,0.3,0.3,0.6,0.5,0.9C273.1,592.4,272.7,592.4,272.4,592.4z"/>
<path d="M272.3,594l0.1-0.1c0,0,0,0,0,0c0.1,0,0.3,0,0.4,0c0,0,0,0,0,0c0,0,0.1,0,0.1,0c0,0.2,0,0.4,0,0.7l0,0
c-0.2,0-0.4,0-0.6,0c0,0,0,0,0-0.1c0,0,0,0-0.1,0C272.2,594.3,272.2,594.2,272.3,594C272.3,594,272.3,594,272.3,594z"/>
<path class="st2" d="M272.4,593.9L272.4,593.9l0-0.4c0.1,0.1,0.3,0.2,0.4,0.4C272.7,593.9,272.5,593.9,272.4,593.9z"/>
<path class="st2" d="M272.3,595.2c0-0.2,0-0.4,0-0.6c0.2,0,0.4,0,0.6,0C272.7,594.8,272.5,595,272.3,595.2z"/>
<path d="M272.3,595.2C272.3,595.2,272.3,595.2,272.3,595.2L272.3,595.2L272.3,595.2z"/>
<path d="M272.3,594.5C272.3,594.6,272.3,594.6,272.3,594.5C272.3,594.6,272.3,594.6,272.3,594.5L272.3,594.5z"/>
<path d="M272.4,593.9l-0.1,0.1l0-0.1C272.3,593.9,272.3,593.9,272.4,593.9z"/>
<path d="M272.2,594.5C272.3,594.5,272.3,594.5,272.2,594.5L272.2,594.5C272.2,594.6,272.2,594.6,272.2,594.5z"/>
<path d="M272.3,595.2L272.3,595.2c0,0-0.1,0-0.1,0C272.2,595.2,272.3,595.2,272.3,595.2z"/>
<path d="M272.2,594c0,0,0-0.1,0-0.1V594C272.3,594,272.3,594,272.2,594z"/>
<path class="st2" d="M271.6,594.5c0.2-0.2,0.4-0.3,0.6-0.5c0,0.2,0,0.3,0,0.5C272,594.5,271.8,594.5,271.6,594.5
C271.6,594.5,271.6,594.5,271.6,594.5z"/>
<path class="st2" d="M272.2,595.3c-0.2,0-0.4,0-0.6,0l0-0.1C271.8,595.2,272,595.3,272.2,595.3z"/>
<path d="M271.6,595.3c0.2,0,0.4,0,0.6,0c0,0,0.1,0,0.1,0c0,0,0,0,0,0c0.2-0.2,0.4-0.4,0.6-0.6h0v0c0.2-0.2,0.3-0.4,0.5-0.6
c0.1-0.1,0.1-0.2,0.2-0.2c0-0.3,0-0.7,0-1c-0.1-0.1-0.1-0.2-0.2-0.3c-0.2-0.3-0.3-0.6-0.5-0.9c0.2-0.5,0.4-1.1,0.6-1.6
c0.2,0,0.4,0,0.6,0c0.2,0.5,0.4,1,0.6,1.6c-0.1,0.1-0.1,0.2,0,0.3c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.4,0.3,0.7,0.4,1.1
c0.1,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.2,0,0.2c0,0.1-0.1,0.2-0.1,0.3c0,0-0.1,0-0.1,0v0c0,0.1,0,0.1,0,0.2c0,0.1-0.1,0.3-0.1,0.4
c0,0,0,0,0,0c-0.1,0-0.2,0-0.3,0c0,0-0.1-0.1-0.2-0.1c-0.2,0.2-0.3,0.5-0.5,0.7c-0.1,0.1-0.2,0.2-0.2,0.2
c-0.2,0.2-0.3,0.3-0.5,0.5l0,0c-0.2,0.2-0.3,0.5-0.5,0.7C272.6,596.2,272.1,595.8,271.6,595.3L271.6,595.3L271.6,595.3z"/>
<path d="M271.6,594.7c0,0,0-0.1,0-0.1c0.2,0,0.4,0,0.6,0c0,0,0,0,0,0.1c0,0,0,0,0.1,0c0,0.2,0,0.4,0,0.6l0,0c0,0-0.1,0-0.1,0
c-0.2,0-0.4,0-0.6,0C271.6,595.1,271.6,594.9,271.6,594.7L271.6,594.7z"/>
<path d="M271.7,588.7L271.7,588.7L271.7,588.7C271.6,588.7,271.6,588.7,271.7,588.7z"/>
<path class="st2" d="M271.7,588.7C271.6,588.7,271.6,588.7,271.7,588.7C271.6,588.7,271.6,588.7,271.7,588.7
C271.6,588.7,271.6,588.7,271.7,588.7z"/>
<path d="M271.6,588.8c0.2,0.2,0.5,0.4,0.7,0.6c-0.2,0-0.4,0-0.7,0l-0.2-0.2C271.4,589,271.4,588.8,271.6,588.8L271.6,588.8z"/>
<path class="st2" d="M271.6,594.5C271.6,594.5,271.6,594.5,271.6,594.5L271.6,594.5L271.6,594.5z"/>
<path d="M271.6,594.5c0,0,0,0.1,0,0.1C271.6,594.6,271.6,594.6,271.6,594.5L271.6,594.5z"/>
<path d="M271.4,588.2c0.1,0.2,0.1,0.3,0.2,0.5c-0.2,0-0.4,0-0.6,0C271.1,588.5,271.3,588.4,271.4,588.2z"/>
<path class="st2" d="M271.6,595.2L271.6,595.2L271.6,595.2C271.5,595.3,271.5,595.3,271.6,595.2c-0.1-0.1,0-0.3,0-0.6
C271.6,594.9,271.6,595.1,271.6,595.2z"/>
<path class="st2" d="M271.6,595.3L271.6,595.3L271.6,595.3C271.5,595.3,271.5,595.3,271.6,595.3z"/>
<path class="st2" d="M271,588.7c0.2,0,0.4,0,0.6,0c0,0,0,0,0,0c-0.2,0.1-0.2,0.3-0.1,0.5l-0.2,0l-0.2,0
C271.2,589,271.2,588.8,271,588.7C271,588.7,271,588.7,271,588.7z"/>
<path d="M271.3,589.2l0.2,0l0.2,0.2c0,0.2,0,0.4,0,0.6c-0.2-0.2-0.4-0.4-0.6-0.6l0.1-0.2L271.3,589.2z"/>
<path class="st2" d="M271,588.7C271,588.7,271,588.7,271,588.7C271,588.7,270.9,588.7,271,588.7C271,588.7,271,588.7,271,588.7z"
/>
<path d="M271,588.7L271,588.7L271,588.7C270.9,588.7,271,588.7,271,588.7z"/>
<path d="M271,588.7c0.2,0.1,0.2,0.3,0.1,0.5l-0.1,0.2c-0.2-0.2-0.4-0.5-0.6-0.7C270.6,588.7,270.8,588.7,271,588.7L271,588.7z"/>
<path d="M271.5,595.3c-1.2,0.2-2.3,0.4-3.5,0.6c-0.1-0.7-0.6-1.8-0.3-2.2c1.2-1.4,2.6-2.5,3.9-3.7c0-0.2,0-0.4,0-0.6
c0.2,0,0.4,0,0.7,0c0.4,0.2,0.8,0.4,1.3,0.6c-0.2,0.5-0.4,1.1-0.6,1.6c-0.2,0.3-0.4,0.5-0.7,0.8c0,0.4,0,0.7,0,1.1l0.1,0.3
l-0.1,0.1c0,0,0,0,0,0c0,0-0.1,0-0.1,0c0,0,0,0.1,0,0.1c-0.2,0.2-0.4,0.3-0.6,0.5l0,0.1c0,0,0,0.1,0,0.1v0
C271.6,594.9,271.5,595.1,271.5,595.3z"/>
<polygon class="st2" points="263.3,589.9 263.3,589.9 263.2,589.8 "/>
<path class="st2" d="M263.3,589.8C263.3,589.8,263.3,589.9,263.3,589.8l-0.1,0C263.3,589.8,263.3,589.8,263.3,589.8z"/>
<path class="st2" d="M263.3,589.9C263.4,589.9,263.3,590,263.3,589.9c-0.1,0-0.1,0-0.1-0.1L263.3,589.9z"/>
<path class="st2" d="M263.2,590c0.1,0.4,0.1,0.8,0.2,1.2C263.4,590.8,263.3,590.4,263.2,590C263.2,590,263.2,590,263.2,590z"/>
<path d="M263.1,589c0,0,0.1,0.1,0.2,0.1v0h0C263.2,589.1,263.2,589,263.1,589z"/>
<path class="st2" d="M262.7,595.3c0.2,0.2,0.3,0.3,0.5,0.5c-0.1,0-0.1,0-0.2,0C262.9,595.6,262.8,595.5,262.7,595.3z"/>
<path class="st2" d="M263.1,595.8l-0.1,0c0,0,0,0-0.1-0.1C263,595.8,263.1,595.8,263.1,595.8z"/>
<path class="st2" d="M262.7,589.9c0.2-0.3,0.4-0.5,0.6-0.8h0c0,0.2,0,0.5,0,0.7c0,0-0.1,0-0.1,0c0,0,0,0.1,0,0.1v0c0,0,0,0,0,0
C263.1,589.9,262.9,589.8,262.7,589.9z"/>
<path class="st2" d="M262,593.8c0-0.8-0.1-1.6-0.2-2.4c0.2,0.7,0.5,1.5,0.7,2.2C262.3,593.7,262.1,593.8,262,593.8z"/>
<path d="M262.7,589.9c0.2-0.1,0.4,0,0.6,0.1c0.1,0.4,0.2,0.8,0.2,1.2c-0.4,0-0.7,0-1.1,0c0-0.4,0.1-0.7,0.1-1.1
C262.5,590.1,262.6,590,262.7,589.9z"/>
<path d="M261.1,595.3l0.2-0.2c0.3,0,0.7,0,1.1,0c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.2,0.2,0.3,0.3,0.5
C262.4,595.6,261.7,595.5,261.1,595.3z"/>
<path d="M262.5,593.7c-0.2-0.7-0.5-1.5-0.7-2.2c0.1-0.1,0.2-0.2,0.2-0.3l0.2-0.1l0.1,0.1c0.4,0,0.8,0,1.1,0
c-0.1-0.4-0.1-0.8-0.2-1.2v0c0,0,0.1-0.1,0.1-0.1v0c0,0,0-0.1,0-0.1c0.2-0.1,0.4-0.2,0.6-0.3l-0.1,0.1c2-1.2,4-2.4,6.5-1
c0.2,0.2,0.4,0.5,0.6,0.7c0.2,0.2,0.4,0.4,0.6,0.6c-1.3,1.2-2.8,2.4-3.9,3.7c-0.3,0.4,0.2,1.4,0.3,2.2c-1.7,2.9-3.3-0.6-4.9-0.1
l0.1,0c-0.2-0.2-0.3-0.3-0.5-0.5c-0.1-0.1-0.2-0.1-0.2-0.2c-0.1-0.1-0.1-0.2,0-0.3C262.5,594.4,262.5,594,262.5,593.7z"/>
<path d="M262.8,588.8c-0.9-0.6-1.6-0.6-2.2,0C261.2,588.2,261.9,588.2,262.8,588.8z"/>
<path d="M262.5,594.8c-0.2-0.3-0.4-0.6-0.6-0.8c0,0,0,0,0.1,0c0,0,0-0.1,0-0.1c0.2-0.1,0.3-0.1,0.5-0.2
C262.5,594,262.5,594.4,262.5,594.8z"/>
<path class="st2" d="M262,591.2c0-0.4-0.1-0.7-0.1-1.1c0,0,0,0,0.1,0h0c0.1,0.2,0.3,0.2,0.5,0.1c0,0.4-0.1,0.7-0.1,1.1l-0.1-0.1
L262,591.2z"/>
<path d="M261.8,593.9l0.1,0.1C262,594,261.9,594,261.8,593.9C261.9,593.9,261.9,593.9,261.8,593.9z"/>
<path d="M261.8,593.9c0,0,0.1,0,0.1,0c0,0,0,0.1,0,0.1L261.8,593.9z"/>
<path class="st2" d="M261.9,590C261.9,590,261.9,590,261.9,590C261.9,590,261.9,590,261.9,590C261.9,590,261.9,590,261.9,590z"/>
<path class="st2" d="M261.9,590c-0.2,0-0.4,0-0.6,0l0.1,0c0,0,0,0-0.1,0c0.2-0.2,0.3-0.3,0.5-0.5
C261.8,589.7,261.8,589.9,261.9,590L261.9,590C261.9,590,261.9,590,261.9,590C261.9,590,261.9,590,261.9,590z"/>
<path class="st2" d="M261.3,590L261.3,590L261.3,590C261.3,590,261.3,590,261.3,590z"/>
<path d="M260,590c0.2-0.6,0.4-1,0.7-1.2c0.6-0.6,1.3-0.5,2.2,0c0.1,0,0.2,0.1,0.3,0.2c0,0,0.1,0.1,0.2,0.1
c-0.2,0.2-0.4,0.5-0.6,0.8c-0.1,0.1-0.1,0.2-0.2,0.2c-0.2,0.1-0.4,0.1-0.5-0.1c-0.1-0.2-0.2-0.3-0.2-0.5
c-0.2,0.2-0.3,0.3-0.5,0.5C260.8,590,260.4,590,260,590z"/>
<path d="M260.4,595.3c0-0.2,0.1-0.4,0.2-0.6c0.2,0.2,0.5,0.3,0.8,0.5l-0.2,0.2C260.9,595.3,260.7,595.3,260.4,595.3z"/>
<path class="st2" d="M261.4,595.1c-0.3-0.2-0.5-0.3-0.8-0.5c0,0,0-0.1,0-0.1c0.1-0.1,0.2-0.3,0.1-0.5c0.4,0,0.8,0,1.2-0.1
c0.2,0.3,0.4,0.6,0.6,0.8c-0.1,0.1-0.1,0.2,0,0.3C262.1,595.1,261.7,595.1,261.4,595.1z"/>
<path class="st2" d="M260.6,594.5C260.6,594.6,260.6,594.6,260.6,594.5L260.6,594.5C260.6,594.6,260.6,594.6,260.6,594.5z"/>
<path class="st2" d="M260.6,594.6C260.6,594.6,260.6,594.5,260.6,594.6C260.6,594.6,260.6,594.6,260.6,594.6
C260.6,594.6,260.6,594.6,260.6,594.6z"/>
<path class="st2" d="M260.6,594.6c0,0.2-0.1,0.4-0.2,0.6h-0.3C260.3,595,260.4,594.8,260.6,594.6L260.6,594.6z"/>
<path class="st2" d="M260.1,592.7c0.1,0.4,0.3,0.7,0.4,1.1c-0.4,0-0.8,0.1-1.2,0.1c0-0.2,0-0.4,0-0.6
C259.6,593.1,259.8,592.9,260.1,592.7z"/>
<path d="M260,590C260,590,259.9,590.1,260,590L260,590C259.9,590,259.9,590,260,590z"/>
<path d="M259.3,592.6l0.2-0.1l0.3,0.1l0.2,0.2c-0.3,0.2-0.5,0.4-0.8,0.6C259.3,593.1,259.3,592.8,259.3,592.6L259.3,592.6z"/>
<path d="M260.1,595.3c-1.7,0.4-1.3-0.5-0.8-1.4c0.4,0,0.8-0.1,1.2-0.1c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.2,0,0.4-0.1,0.5
c0,0,0,0-0.1,0.1c0,0,0,0,0,0C260.4,594.8,260.3,595,260.1,595.3z"/>
<path class="st2" d="M259.4,592.1c0.1,0.2,0.2,0.3,0.4,0.4l-0.3-0.1l-0.2,0.1C259.5,592.5,259.5,592.3,259.4,592.1z"/>
<path class="st2" d="M258.8,591.4c0.2,0.1,0.3,0.2,0.4,0.4C259,591.8,258.9,591.6,258.8,591.4z"/>
<path d="M258.6,589.8c0.4,0.1,0.9,0.2,1.3,0.3c0,0,0,0,0-0.1h0c0.4,0,0.8,0,1.3,0l0,0c0.2,0,0.4,0,0.6,0c0,0.4,0.1,0.8,0.1,1.1
c-0.1,0.1-0.1,0.2-0.2,0.3c0.1,0.8,0.1,1.6,0.2,2.4c0,0-0.1,0-0.1,0c0,0,0,0,0.1,0.1c-0.4,0-0.8,0-1.2,0.1
c-0.1-0.1-0.2-0.2-0.2-0.2c-0.1-0.4-0.3-0.7-0.4-1.1l-0.2-0.2c-0.2-0.1-0.3-0.2-0.4-0.4c-0.1-0.1-0.2-0.2-0.2-0.2
c-0.1-0.2-0.2-0.3-0.4-0.4c-0.1-0.1-0.2-0.2-0.2-0.2c0-0.1-0.1-0.2,0-0.2c0-0.1,0.1-0.2,0.1-0.3c0,0,0.1,0,0.1,0
c0-0.2,0-0.5,0-0.7L258.6,589.8z"/>
<path d="M258.6,590.6l0.1,0.1c0,0-0.1,0-0.1,0C258.6,590.7,258.6,590.6,258.6,590.6z"/>
<path d="M258.7,590c0,0.2,0,0.5,0,0.7l-0.1-0.1C258.6,590.4,258.6,590.2,258.7,590C258.6,590,258.7,590,258.7,590z"/>
<path d="M258,590.7c0.2-0.2,0.4-0.4,0.6-0.6c0,0.2,0,0.3,0,0.5c0,0,0,0.1,0,0.1C258.4,590.7,258.2,590.7,258,590.7z"/>
<path class="st2" d="M258.6,589.8l0,0.2c0,0-0.1,0.1-0.1,0.1C258.6,590,258.6,589.9,258.6,589.8L258.6,589.8z"/>
<path class="st2" d="M258.6,590.1c-0.2,0.2-0.4,0.4-0.6,0.6c-0.4-0.5-0.7-0.9-1.1-1.4c0.6,0.1,1.2,0.3,1.7,0.4
C258.6,589.9,258.6,590,258.6,590.1z"/>
<path class="st2" d="M258.5,591.2c-0.2-0.2-0.4-0.3-0.6-0.5l0,0c0.2,0,0.4,0,0.6,0c0,0.1-0.1,0.2-0.1,0.3
C258.5,591,258.5,591.1,258.5,591.2z"/>
<path d="M256.7,591.2l0,0.1C256.7,591.3,256.7,591.3,256.7,591.2C256.7,591.3,256.7,591.3,256.7,591.2z"/>
<path d="M256.1,590.7C256.1,590.7,256.1,590.7,256.1,590.7L256.1,590.7C256,590.7,256,590.7,256.1,590.7z"/>
<path d="M259.4,592.1c0.1,0.2,0.1,0.4-0.1,0.5c-0.9-0.5-1.8-0.9-2.6-1.4c0,0,0,0,0,0c-0.2-0.2-0.4-0.4-0.6-0.6c0,0,0,0,0,0
c-0.1-0.5-0.2-1-0.3-1.4c0.4,0,0.7,0.1,1.1,0.1c0.4,0.5,0.7,0.9,1.1,1.4l0,0c0.2,0.2,0.4,0.3,0.6,0.5c0.1,0.1,0.2,0.2,0.2,0.2
c0.1,0.2,0.2,0.3,0.4,0.4C259.3,591.9,259.3,592,259.4,592.1z"/>
<path class="st2" d="M255.7,589.2c0.1,0.5,0.2,0.9,0.3,1.4C255.9,590.2,255.8,589.7,255.7,589.2
C255.7,589.2,255.7,589.2,255.7,589.2z"/>
<path class="st2" d="M255.7,589.2C255.7,589.2,255.7,589.2,255.7,589.2L255.7,589.2L255.7,589.2z"/>
<path d="M256.7,591.3c-0.3,2.2-1.8,0-2.6,0.7c-0.2-0.2-0.4-0.4-0.6-0.6c0.2-0.7,0.3-1.3,0.5-2c0.6,0,1.1-0.1,1.7-0.1
c0.1,0.5,0.2,0.9,0.4,1.4c0,0,0,0,0,0c0,0,0,0,0,0l0,0.1c0,0,0,0,0-0.1C256.3,590.9,256.5,591.1,256.7,591.3z"/>
<path class="st2" d="M253.4,591.9c0-0.2,0-0.4,0-0.7l0,0c0,0,0,0,0,0c0.2,0.2,0.4,0.4,0.6,0.6C253.9,592,253.6,592,253.4,591.9z"
/>
<path class="st2" d="M253.4,591.3c-0.2-0.4-0.4-0.9-0.6-1.3v0c0.2-0.2,0.5-0.4,0.8-0.7c0.1,0,0.3,0,0.4,0
C253.8,590,253.6,590.7,253.4,591.3C253.5,591.3,253.5,591.3,253.4,591.3L253.4,591.3z"/>
<path d="M253.4,591.3L253.4,591.3L253.4,591.3z"/>
<path class="st2" d="M252.8,590C252.8,590,252.8,590.1,252.8,590L252.8,590C252.8,590,252.8,590,252.8,590z"/>
<path class="st2" d="M251.9,589.9L251.9,589.9C251.9,590,251.9,590,251.9,589.9C251.9,590,251.9,590,251.9,589.9z"/>
<path d="M252.8,590c0.2,0.4,0.4,0.9,0.6,1.3c0,0.2,0,0.4,0,0.7c-0.4-0.3-0.9-0.6-1.3-0.9c-0.1-0.1-0.2-0.2-0.3-0.2
c0,0-0.1-0.1-0.1-0.1c0-0.1,0.1-0.3,0.1-0.4c0-0.1,0.1-0.2,0.1-0.3l0-0.1C252.2,589.9,252.5,590,252.8,590L252.8,590
C252.8,590.1,252.8,590,252.8,590z"/>
<path d="M251.8,590.3c0-0.1,0-0.2,0.1-0.3c0,0,0,0,0,0C251.8,590.1,251.8,590.2,251.8,590.3z"/>
<path d="M251.8,590c0,0.1-0.1,0.2-0.1,0.3c-0.1,0.2-0.1,0.3-0.2,0.5c-0.2-0.2-0.3-0.4-0.5-0.5C251.3,590.1,251.6,590.1,251.8,590
z"/>
<path d="M251.8,590.8c0.1,0.1,0.2,0.1,0.3,0.2C252,590.9,251.9,590.9,251.8,590.8z"/>
<path class="st2" d="M251.8,590.3c-0.1,0.1-0.1,0.3-0.1,0.4l-0.1,0C251.6,590.6,251.7,590.4,251.8,590.3z"/>
</g>
</g>
<polygon class="st1" points="75.5,642.5 74.2,640.9 107.9,612.1 109.3,613.7 "/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 992 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 971 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 64.5 64" style="enable-background:new 0 0 64.5 64;" xml:space="preserve">
<g id="XMLID_12_">
<g>
<g id="XMLID_14_">
<g>
<path d="M56,63.7L40.9,48.5c-4.1,2.7-9.1,4.3-14.5,4.3C11.8,52.8,0,41,0,26.4C0,11.8,11.8,0,26.4,0C41,0,52.8,11.8,52.8,26.4
c0,5.1-1.4,9.9-3.9,13.9l15.2,15.3c0.8,0.8,0.1,2.7-1.5,4.4l-2.3,2.3C58.8,63.8,56.8,64.5,56,63.7z M44,26.4
c0-9.7-7.9-17.6-17.6-17.6c-9.7,0-17.6,7.9-17.6,17.6c0,9.7,7.9,17.7,17.6,17.7C36.1,44.1,44,36.1,44,26.4z"/>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -1,13 +0,0 @@
import React from 'react';
class Footer extends React.Component{
render(){
return(
<footer>
<span className="arabic-text"> جميع الحقوق محفوظة لمؤسسة مٌصرين</span>
<span className="english-text">&nbsp; all rights reserved</span>
</footer>
)
}
}
export default (Footer);

View File

@ -1,33 +0,0 @@
import React from 'react';
import '../stylesheets/style.scss'
import {Link} from 'react-router-dom';
class Header extends React.Component {
render() {
const Logo = () => {
return (
<section className="logo-container">
<Link to="/">
<img className="site-logo" src={require('../assets/images/Logo.svg')} alt="logo 858 "/>
{/*<h1>An archive of resistance</h1>*/}
</Link>
</section>
);
}
const Counter = () => {
return (
<div className="counter-container">
<img src={require('../assets/images/Counter.svg') } alt="counter"/>
</div>
);
}
return (
<header>
<Logo/>
<Counter/>
</header>
)
}
}
export default (Header);

View File

@ -1,13 +0,0 @@
import React from 'react';
class Loading extends React.Component{
render(){
return(
<div className="loading">
<span></span>
<span></span>
<span></span>
</div>
)
}
}
export default Loading;

View File

@ -1,49 +0,0 @@
import React from 'react';
class Nav extends React.Component {
render() {
return (
<nav className={"nav-footer"}>
<ul>
<li>
<a href="/contact">
<span className="arabic-text">اتصل بنا</span>
<br/>
<span className="english-text"> contact us</span>
</a>
</li>
<li>
<a href="">
<span className="arabic-text">دليل توجيهي</span>
<br/>
<span className="english-text"> tutorials</span>
</a>
</li>
<li>
<a href="/">
<span className="arabic-text">الرئيسية</span>
<br/>
<span className="english-text"> main</span>
</a>
</li>
<li>
<a href="https://858.ma/">
<span className="arabic-text">الأرشيف</span>
<br/>
<span className="english-text"> the archive</span>
</a>
</li>
<li>
<a href="/about">
<span className="arabic-text">ماهذا الشيء</span>
<br/>
<span className="english-text"> what is this</span>
</a>
</li>
</ul>
</nav>
)
}
}
export default (Nav);

View File

@ -1,75 +0,0 @@
import Grid from 'react-css-grid'
import React from 'react';
import PropTypes from 'prop-types';
import VideoItem from "./VideoItem";
import RandomItemTitle from "./SectionHeading";
import { Link } from 'react-router-dom';
class RandomDate extends React.Component {
shuffleDate() {
this.props.getRandomDateVideos(this.props.allDates);
}
render() {
return (
<section className="random-item-container">
<h2 className="section-heading">
<span className="arabic-text random-section-title"> يوم من أيام الارشيف</span>
<br />
<span className="section-title">
<span className='english-text bold-english-text random-section-title'> Dates from the archive
</span>
</span>
</h2>
<Grid
width={450}
>
{/* View all dates button*/}
<Link className="view-items-link" to="/dates">
<button className="view-all-items">
<span className={"highlighted-text"}>
<span className="english-text"> all dates &nbsp; </span>
<span className="arabic-text"> جميع الأيام </span>
</span>
</button>
</Link>
{/* Shuffle button */}
<button className="shuffle-button" onClick={this.shuffleDate.bind(this)}>
<span className={"highlighted-text"}>
<span className="english-text">Shuffle Dates - </span>
<span className="arabic-text"> مكان عشوائي </span>
</span>
<i className="fa fa-random"></i>
</button>
</Grid>
<Grid className="random-dates"
width={220}
gap={12}>
{/*{this.props.videos.map(video =>*/}
{/*<VideoItem id={video.id} key={video.id} title={video.title}/>*/}
{/*)}*/}
</Grid>
<RandomItemTitle title={this.props.dateName}
count={this.props.dateCount}
src={'/results/date/' + this.props.dateName}
/>
</section>
)
}
}
RandomDate.propTypes = {
dateName: PropTypes.string,
allDates: PropTypes.array,
videos: PropTypes.array,
loading: PropTypes.bool,
dateCount: PropTypes.number,
getRandomDateVideos: PropTypes.func
};
export default (RandomDate);

View File

@ -1,95 +0,0 @@
import Grid from 'react-css-grid'
import React from 'react';
import PropTypes from 'prop-types';
import { getStaticMapURL } from '../utils/mapbox';
import VideoItem from "./VideoItem";
import RandomItemTitle from "./SectionHeading";
import {Link} from 'react-router-dom';
import {Container, Row, Col} from 'react-bootstrap';
class RandomPlace extends React.Component {
shufflePlace() {
this.props.getRandomPlaceVideos();
}
getStaticMapURL() {
return getStaticMapURL(this.props.place);
}
render() {
console.log('random place props', this.props);
return (
<section className="random-item-container">
<h2 className="section-heading">
<span className="arabic-text random-section-title">من أماكن الارشيف</span>
<br/>
<span className="section-title">
<span className='english-text bold-english-text random-section-title'> Places from the archive
</span>
</span>
</h2>
<Grid width={450}>
{/* View all places button*/}
<Link className="view-items-link" to="/places">
<button className="view-all-items">
<span className={"highlighted-text"}>
<span className="english-text"> all places &nbsp; </span>
< span className="arabic-text"> جميع الأماكن </span>
</span>
</button>
</Link>
{/* Shuffle button */}
<button className="shuffle-button" onClick={this.shufflePlace.bind(this)}>
<span className={"highlighted-text"}>
<span className="english-text">Shuffle Places - </span>
<span className="arabic-text"> مكان عشوائي </span>
</span>
<i className="fa fa-random"></i>
</button>
</Grid>
<Container>
<Row>
<Col sm={4} >
{this.props.place && (
<img class={"place-map"} src={this.getStaticMapURL()} />
)}
</Col>
<Col sm={8} >
<Container>
<Row>
{this.props.videos.map(video =>
<Col sm={4}>
<VideoItem id={video.id} key={video.id} title={video.title}/>
</Col>
)}
</Row>
</Container>
</Col>
</Row>
</Container>
{this.props.placeName && (
<RandomItemTitle
title={this.props.placeName}
count={this.props.placeCount}
src={'/results/place/' + this.props.placeName}
/>
)}
</section>
)
}
}
RandomPlace.propTypes = {
placeName: PropTypes.string,
allPlaces: PropTypes.array,
videos: PropTypes.array,
loading: PropTypes.bool,
placeCount: PropTypes.number,
getRandomPlaceVideos: PropTypes.func
};
export default (RandomPlace);

View File

@ -1,79 +0,0 @@
import Grid from 'react-css-grid'
import React from 'react';
import PropTypes from 'prop-types';
import VideoItem from "./VideoItem";
import RandomItemTitle from "./SectionHeading";
import { Link } from 'react-router-dom';
// Refactor
class RandomTopic extends React.Component {
shuffleTopic() {
this.props.getRandomTopicVideos(this.props.allTopics);
}
render() {
return (
<section className="random-item-container">
<h2 className="section-heading">
<span className="arabic-text random-section-title">من مواضيع الارشيف</span>
<br />
{/*<span className="english-text bold-english-text">topics from the Archive </span>*/}
<span className="section-title">
<span className='english-text bold-english-text random-section-title'> topics from the archive
</span>
</span>
</h2>
<Grid
className={"buttons-grid"}
width={450}
>
{/* View all topics button*/}
<Link className="view-items-link" to="/topics">
<button className="view-all-items">
<span className="highlighted-text">
<span className="english-text"> all topics &nbsp; </span>
<span className="arabic-text"> جميع المواضيع </span>
</span>
</button>
</Link>
{/* Shuffle button */}
<button className="shuffle-button" onClick={this.shuffleTopic.bind(this)}>
<span className="highlighted-text">
<span className="arabic-text"> موضوع عشوائي </span>
<span className="english-text">&nbsp; shuffle topics </span>
</span>
&nbsp;
<i className="fa fa-random"></i>
</button>
</Grid>
<Grid className="random-topics"
width={220}
gap={12}>
{this.props.videos.map(video =>
<VideoItem id={video.id} key={video.id} title={video.title} />
)}
</Grid>
<RandomItemTitle title={this.props.topicName}
count={this.props.topicCount}
src={'/results/topic/' + this.props.topicName}
/>
</section>
)
}
}
RandomTopic.propTypes = {
topicName: PropTypes.string,
allTopics: PropTypes.array,
videos: PropTypes.array,
loading: PropTypes.bool,
topicCount: PropTypes.number,
getRandomTopicVideos: PropTypes.func
};
export default (RandomTopic);

View File

@ -1,50 +0,0 @@
import Grid from 'react-css-grid'
import React from 'react';
import PropTypes from 'prop-types';
import VideoItem from "./VideoItem";
import RandomItemTitle from "./SectionHeading";
import {Link} from 'react-router-dom';
class RandomTopic extends React.Component {
shuffleTopic() {
this.props.getRandomTopicVideos(this.props.allTopics);
}
render() {
return (
<section>
<h2 className="section-subheading">Related Videos</h2>
<Grid
width={450}
>
{/* Shuffle button */}
<button className="shuffle-button" onClick={this.shuffleTopic.bind(this)}>
<span className="english-text">Shuffle Videos - </span>
<span className="arabic-text"> ضربة حظ </span>
<i className="fa fa-random"></i>
</button>
</Grid>
<Grid className="random-topics"
width={220}
gap={12}>
{this.props.videos.map(video =>
<VideoItem id={video.id} key={video.id} title={video.title}/>
)}
</Grid>
</section>
)
}
}
RandomTopic.propTypes = {
topicName: PropTypes.string,
allTopics: PropTypes.array,
videos: PropTypes.array,
loading: PropTypes.bool,
topicCount: PropTypes.number,
getRandomTopicVideos: PropTypes.func
};
export default (RandomTopic);

View File

@ -1,25 +0,0 @@
import React from 'react';
class Search extends React.Component {
render() {
return (
<form action="">
<button className="search-button" type='submit'>
<img src={require('../assets/images/search.svg')} alt=""/>
</button>
{/*<div className="search-box">*/}
{/*<input type="text" required/>*/}
{/*<div className="placeholder">*/}
{/*<span className="english-text">Search</span>*/}
{/*<span className="arabic-text">بحث في الأرشيف - </span>*/}
{/*</div>*/}
{/*</div>*/}
{/* TODO: apply the font for search the archive */}
<input type="text" className="search-box" name="search-box" placeholder="search the Archive بحث في الأرشيف"/>
</form>
)
}
}
export default (Search);

View File

@ -1,19 +0,0 @@
import React from 'react';
/**
* a section heading is any heading that needs the style of having a horizontal line underneath it.
* it could be the Topics Heading/Title, Date..etc.
*/
class SectionHeading extends React.Component {
render() {
return (
<h3 className="section-title">
<span>
<a className="normal-link highlighted-link" href={this.props.src}> {this.props.title} /{this.props.count}/</a>
</span>
</h3>
)
}
}
export default (SectionHeading);

View File

@ -1,62 +0,0 @@
import React from 'react';
import {Link} from 'react-router-dom';
import Grid from "react-css-grid";
class TopicsList extends React.Component {
constructor() {
super();
this.state = {
currentFilter: "",
filteredTopics: [],
}
}
componentDidMount() {
this.setState({
filteredTopics: this.props.allTopics
})
}
filterTopics(event) {
// find the topics that contain that string
// return filtered topics.
// this.
const input = event.target.value.toLowerCase();
this.setState({
filteredTopics: this.props.allTopics.filter(topic => topic.name.toLowerCase().indexOf(input) !== -1)
})
}
render() {
return (
<main className="topics-list">
<section className="filter-box">
<label className="label english-text" htmlFor="search-topics">
<i className="fa fa-filter">&nbsp;</i>
<span className="english-text">Filter Topics &nbsp;</span>
<span className="arabic-text"> تنقية المواضيع: </span>
<input type="text" id="search-topics" ref="filter-element" onChange={event => this.filterTopics(event)}/>
</label>
</section>
<Grid className="random-topics"
width={220}
gap={12}>
{this.state.filteredTopics.map(topic => {
return (
<section className="topic-item" key={topic.name}>
<Link to={"/results/topic/" + topic.name}>
<h3 className="english-text">{topic.name} ({topic.items} videos)</h3>
</Link>
</section>
)
}
)}
</Grid>
</main>
)
}
}
export default TopicsList;

View File

@ -1,26 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Link } from 'react-router-dom';
import { getThumbnail } from '../utils/video';
class VideoItem extends React.Component {
render() {
const videoLink = `/videos/${this.props.id}`;
return (
<Link to={ videoLink }>
<section className="video-item">
<section className="video-thumbnail-container">
<img className="video-thumbnail" src={ getThumbnail(this.props.id) } alt=""/>
</section>
<h3 className="video-title">{ this.props.title }</h3>
</section>
</Link>
)
}
}
VideoItem.propTypes = {
id: PropTypes.string,
title: PropTypes.string,
}
export default (VideoItem);

View File

@ -1,70 +0,0 @@
import React from 'react';
import {getVideo} from '../utils/video';
import {Player} from 'video-react';
import RelatedVideos from "./RelatedVideos";
import {getAllTopics, getRandomTopicVideos} from "../actions/topics";
import connect from "react-redux/es/connect/connect";
class VideoPlayer extends React.Component {
componentDidMount() {
if (this.props.allTopics && this.props.allTopics.length > 0 && !this.props.randomTopic) {
this.props.getRandomTopicVideos(this.props.allTopics);
} else {
this.props.getAllTopics();
}
}
componentWillReceiveProps(nextProps) {
// This is slightly awkward - we need to check that we have all topics,
// But don't have a random topic yet (or at not already loading a random topic)
if ((this.props.allTopics || nextProps.allTopics) && !this.props.loadingRandomTopic && !nextProps.loadingRandomTopic && !this.props.randomTopic) {
this.props.getRandomTopicVideos(nextProps.allTopics);
}
}
render() {
return (
<section>
<Player src={getVideo(this.props.id)} controls>
</Player>
<h2 className='video-player-title'>{this.props.title}</h2>
<h3 className="video-player-date text-left">date {this.props.date} </h3>
<p className="text-left">{this.props.description}</p>
<RelatedVideos
topicName={this.props.randomTopic || ''}
allTopics={this.props.allTopics || []}
topicCount={this.props.randomTopicCount}
videos={this.props.randomTopicVideos || []}
loading={this.props.loadingAllTopics || this.props.loadingRandomTopic}
getRandomTopicVideos={this.props.getRandomTopicVideos}
/>
</section>
)
}
}
//
// VideoPlayer.propTypes = {
// title: PropTypes.string,
// date: PropTypes.string,
// description: PropTypes.string
// };
const mapStateToProps = state => ({
allTopics: state.topics.allTopics,
loadingAllTopics: state.topics.loadingAllTopics,
randomTopic: state.topics.randomTopic,
randomTopicCount: state.topics.randomTopicCount,
loadingRandomTopic: state.topics.loadingRandomTopic,
randomTopicVideos: state.topics.randomTopicVideos
});
const mapDispatchToProps = dispatch => ({
getAllTopics: () => dispatch(getAllTopics()),
getRandomTopicVideos: allTopics => dispatch(getRandomTopicVideos(allTopics))
});
export default connect(mapStateToProps, mapDispatchToProps)(VideoPlayer);

View File

@ -1,6 +1,3 @@
export default {
baseUrl: 'https://858.ma',
videoBase: 'https://video22.858.ma',
apiUrl: 'https://858.ma/api',
mapboxKey: 'pk.eyJ1Ijoic2FuamF5YiIsImEiOiI3NjVvMFY0In0.byn_eCZGAwR1yaPeC-SVKw'
apiUrl: 'https://858.ma/api'
};

View File

@ -1,23 +0,0 @@
import React from 'react';
import Grid from 'react-css-grid'
class About extends React.Component {
render() {
return (
<div>
<Grid>
<div>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. </div>
<div>
second Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
</div>
</Grid>
</div>
);
}
}
export default (About);

View File

@ -1,79 +1,59 @@
import React from 'react';
import {connect} from 'react-redux';
import {getAllTopics, getRandomTopicVideos} from '../actions/topics';
import {getAllPlaces, getRandomPlaceVideos} from '../actions/places';
import RandomPlace from "../components/RandomPlace";
import RandomDate from "../components/RandomDate";
import RandomTopic from "../components/RandomTopic";
import testAction from '../actions/test';
import fetchVideos from '../actions/fetchVideos';
import Search from '../subComponents/Search';
import Footer from '../subComponents/Footer';
import RandomLocation from "../subComponents/RandomLocation";
import RandomDate from "../subComponents/RandomDate";
import RandomTopic from "../subComponents/RandomTopic";
import Header from "../subComponents/Header";
class Home extends React.Component {
componentDidMount() {
if (this.props.allTopics && this.props.allTopics.length > 0 && !this.props.randomTopic) {
this.props.getRandomTopicVideos(this.props.allTopics);
} else {
this.props.getAllTopics();
}
this.props.getRandomPlaceVideos();
}
componentWillReceiveProps(nextProps) {
// This is slightly awkward - we need to check that we have all topics,
// But don't have a random topic yet (or at not already loading a random topic)
if ((this.props.allTopics || nextProps.allTopics) && !this.props.loadingRandomTopic && !nextProps.loadingRandomTopic && !this.props.randomTopic) {
this.props.getRandomTopicVideos(nextProps.allTopics);
}
clickBtn() {
this.props.testAction('some new value');
}
render() {
return (
<div>
<RandomTopic
topicName={this.props.randomTopic || ''}
allTopics={this.props.allTopics || []}
topicCount={this.props.randomTopicCount}
videos={this.props.randomTopicVideos || []}
loading={this.props.loadingAllTopics || this.props.loadingRandomTopic}
getRandomTopicVideos={this.props.getRandomTopicVideos}
/>
<RandomPlace
place={this.props.randomPlace}
placeName={this.props.randomPlaceName || null}
placeId={this.props.randomPlaceId || ''}
placeCount={this.props.randomPlaceCount || null}
videos={this.props.randomPlaceVideos || []}
loading={this.props.loadingRandomPlace}
getRandomPlaceVideos={this.props.getRandomPlaceVideos}
/>
<Header/>
<Search/>
<RandomTopic/>
<RandomLocation/>
<RandomDate/>
<Footer/>
</div>
);
//
// <div>
// This is home. {this.props.test}
// <div>
// <Link to="/topics">Go to topics</Link>
// </div>
// <div>
// <button onClick={this.clickBtn.bind(this)}>Click me</button>
// <button onClick={this.props.fetchVideos}>Fetch videos</button>
// </div>
// <div>
// {this.props.loading && 'Loading...'}
// {this.props.videos.map(video => {
// return (<div key={video.id}>{video.title}</div>);
// })}
// </div>
// </div>
}
}
const mapStateToProps = state => ({
allTopics: state.topics.allTopics,
loadingAllTopics: state.topics.loadingAllTopics,
randomTopic: state.topics.randomTopic,
randomTopicCount: state.topics.randomTopicCount,
loadingRandomTopic: state.topics.loadingRandomTopic,
randomTopicVideos: state.topics.randomTopicVideos,
// places
randomPlace: state.places.randomPlace,
randomPlaceName: state.places.randomPlaceName,
randomPlaceId: state.places.randomPlaceId,
randomPlaceCount: state.places.randomPlaceCount,
loadingRandomPlace: state.places.loadingRandomPlace,
randomPlaceVideos: state.places.randomPlaceVideos,
test: state.home.test,
loading: state.home.loading,
videos: state.home.videos
});
const mapDispatchToProps = dispatch => ({
getAllTopics: () => dispatch(getAllTopics()),
getRandomTopicVideos: allTopics => dispatch(getRandomTopicVideos(allTopics)),
// places
getAllPlaces: () => dispatch(getAllPlaces()),
getRandomPlaceVideos: () => dispatch(getRandomPlaceVideos()),
testAction: value => dispatch(testAction(value)),
fetchVideos: () => dispatch(fetchVideos())
});
export default connect(mapStateToProps, mapDispatchToProps)(Home);

View File

@ -1,80 +0,0 @@
import React from 'react';
import Grid from "react-css-grid";
import Loading from "../components/Loading";
import VideoItem from "../components/VideoItem";
import PropTypes from "prop-types";
import { getSearchResults } from "../actions/search";
import connect from "react-redux/es/connect/connect";
class Results extends React.Component {
componentDidMount() {
// get params from url
const categoryKey = this.props.match.params.categoryKey;
const searchValue = this.props.match.params.searchValue;
//FIXME: first check if current key / value / results is already in state
this.props.getSearchResults(categoryKey, searchValue);
}
render() {
let title = this.props.match.params.searchValue;
return (
<div>
<h2 className="section-heading">
<span className="section-title">
<span className='english-text bold-english-text random-section-title'>Topic: {title}
</span>
</span>
</h2>
<br />
<Grid className="random-topics"
width={220}
gap={12}>
{this.props.loadingResults && (
<Loading />
)}
{this.props.searchResults && this.props.searchResults.map(video =>
<VideoItem id={video.id} key={video.id} title={video.title} />
)}
</Grid>
</div>
);
}
}
const mapStateToProps = state => ({
searchResults: state.results.currentItems,
currentKey: state.results.currentKey,
currentValue: state.results.currentValue,
currentQuery: state.results.queryParams,
loadingResults: state.results.loadingResults
});
const mapDispatchToProps = dispatch => ({
// the category key is either {topic, date, date}
// the search value could be something like 25th-jan.
getSearchResults: (categoryKey, searchValue) => dispatch(getSearchResults(categoryKey, searchValue)),
});
// each result page has :
// - currentKey: 858.ma/{key}/ where key could be like 'topic'
// - currentValue: 858.ma/topic/{value} where value could be like 'alaa abd al fatah'
// - currentQuery: 858.ma/{query} ?? not getting this! @TODO: clarify this please.
// - currentItems: the list of items/videos.
Results.propTypes = {
// the category key is either a {topic, location, date}.
currentKey: PropTypes.string,
currentValue: PropTypes.string,
currentItems: PropTypes.array,
loading: PropTypes.bool,
categoryItemCount: PropTypes.number,
getSearchResults: PropTypes.func
};
export default connect(mapStateToProps, mapDispatchToProps)(Results);

View File

@ -0,0 +1,13 @@
import React, { Component } from 'react';
class TopicsList extends React.Component {
render() {
return (
<div>
This is topics list.
</div>
);
}
}
export default TopicsList;

View File

@ -1,54 +0,0 @@
import React from 'react';
import SectionHeading from "../components/SectionHeading";
import TopicsList from "../components/TopicsList";
import {getAllTopics} from "../actions/topics";
import {connect} from 'react-redux'
class TopicsListContainer extends React.Component {
componentDidMount(){
// if the data isn't there call the action.
if (!this.props.allTopics){
this.props.getAllTopics();
}
}
render() {
return (
<section className="all-items">
<h2 className="section-heading">
<span className="arabic-text random-section-title">جميع مواضيع الارشيف</span>
<br/>
{/*<span className="english-text bold-english-text">topics from the Archive </span>*/}
<span className="section-title">
<span className='english-text bold-english-text random-section-title'> all topics
</span>
</span>
</h2>
{/* TODO: get the topics objects*/}
<TopicsList allTopics={this.props.allTopics}/>
</section>
);
}
}
// function ->
// - recieves the global state.
// - maps the global state to the local props of the component.
// - maps the global actions to the local props of the component.
/**
*
* @param state
* @returns object
*/
const mapStateToProps = state => ({
allTopics: state.topics.allTopics,
loadingAllTopics: state.topics.loadingAllTopics,
});
/**
*
* @param dispatch: Redux's action dispatcher.
* @returns {{}}
*/
const mapDispatchToProps = dispatch => ({
getAllTopics: () => dispatch(getAllTopics()),
});
export default connect(mapStateToProps, mapDispatchToProps)(TopicsListContainer);

View File

@ -1,56 +0,0 @@
import React from 'react';
import {connect} from 'react-redux';
import VideoPlayer from "../components/VideoPlayer";
import { fetchVideoById } from '../utils/api';
class Video extends React.Component {
constructor() {
super();
this.state = {
currentVideo: null
};
}
componentDidMount() {
// get videoId from the URL
const videoId = this.props.match.params.videoId;
// if data for videoId is already part of allVideos, setState to currentVideo
if (this.props.allVideos && this.props.allVideos.hasOwnProperty(videoId)) {
const currentVideo = this.props.allVideos[videoId];
this.setState({currentVideo: currentVideo});
} else {
// video is not part of allVideos, fetch it from the API
fetchVideoById(videoId)
.then(video => {
this.setState({
currentVideo: video
});
});
}
}
render() {
const video = this.state.currentVideo;
return (
<section>
{ video &&
<VideoPlayer
id={ video.id }
title={ video.title }
date = { video.date }
description={ video.description }
/>
}
</section>
);
}
}
const mapStateToProps = state => ({
allVideos: state.videos.allVideos
});
export default connect(mapStateToProps)(Video);

View File

@ -1,5 +0,0 @@
import { createBrowserHistory } from 'history';
const history = createBrowserHistory();
export default history;

View File

@ -3,10 +3,12 @@ import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import 'bootstrap/dist/css/bootstrap.min.css';
import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(
<App />,
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

7
src/logo.svg Normal file
View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
<g fill="#61DAFB">
<path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/>
<circle cx="420.9" cy="296.5" r="45.7"/>
<path d="M520.5 78.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -1,15 +1,9 @@
import { combineReducers } from 'redux';
import TopicsReducer from './topics';
import VideosReducer from './videos';
import SearchReducer from './search';
import PlacesReducer from './places';
import HomeReducer from './home'
import { connectRouter } from 'connected-react-router'
export default (history) => combineReducers({
router: connectRouter(history),
topics: TopicsReducer,
videos: VideosReducer,
results: SearchReducer,
places: PlacesReducer
const rootReducer = combineReducers({
home: HomeReducer
});
export default rootReducer;

View File

@ -1,38 +0,0 @@
import {
START_LOADING_ALL_PLACES,
LOADED_ALL_PLACES,
START_LOADING_RANDOM_PLACE,
LOADED_RANDOM_PLACE
} from '../actions/action_types';
export default function(state={}, action) {
switch (action.type) {
case START_LOADING_ALL_PLACES:
return Object.assign({}, state, { loadingAllPlaces: true });
case LOADED_ALL_PLACES:
return Object.assign({}, state, {
loadingAllPlaces: false,
allPlaces: action.payload
});
case START_LOADING_RANDOM_PLACE:
return Object.assign({}, state, {
loadingRandomPlace: true
});
case LOADED_RANDOM_PLACE:
return Object.assign({}, state, {
loadingRandomPlace: false,
randomPlace: action.payload.place,
randomPlaceName: action.payload.place.name,
randomPlaceId: action.payload.place.id,
randomPlaceCount: action.payload.itemCount,
randomPlaceVideos: action.payload.videos
});
default:
return state;
}
};

View File

@ -1,21 +0,0 @@
import {
START_LOADING_ALL_RESULTS,
LOADED_ALL_RESULTS
} from '../actions/action_types';
export default function(state={}, action) {
switch (action.type) {
case START_LOADING_ALL_RESULTS:
return Object.assign({}, state, { loadingResults: true });
case LOADED_ALL_RESULTS:
return Object.assign({}, state, {
loadingResults: false,
currentItems: action.payload
});
default:
return state;
}
};

View File

@ -1,36 +0,0 @@
import {
START_LOADING_ALL_TOPICS,
LOADED_ALL_TOPICS,
START_LOADING_RANDOM_TOPIC,
LOADED_RANDOM_TOPIC
} from '../actions/action_types';
export default function(state={}, action) {
switch (action.type) {
case START_LOADING_ALL_TOPICS:
return Object.assign({}, state, { loadingAllTopics: true });
case LOADED_ALL_TOPICS:
return Object.assign({}, state, {
loadingAllTopics: false,
allTopics: action.payload
});
case START_LOADING_RANDOM_TOPIC:
return Object.assign({}, state, {
loadingRandomTopic: true
});
case LOADED_RANDOM_TOPIC:
return Object.assign({}, state, {
loadingRandomTopic: false,
randomTopic: action.payload.topic.name,
randomTopicCount: action.payload.topic.items,
randomTopicVideos: action.payload.videos
});
default:
return state;
}
};

View File

@ -1,22 +0,0 @@
import {
ADD_VIDEOS_TO_STATE
} from '../actions/action_types';
export default function(state={}, action) {
switch (action.type) {
case ADD_VIDEOS_TO_STATE:
let clonedState = Object.assign({}, state);
if (!clonedState.allVideos) {
clonedState.allVideos = {};
}
const videosToAdd = action.payload;
videosToAdd.forEach(video => {
if (!clonedState.allVideos.hasOwnProperty(video.id)) {
clonedState.allVideos[video.id] = video;
}
});
return clonedState;
default:
return state;
}
}

View File

@ -1,21 +1,20 @@
import { createStore, applyMiddleware, compose } from 'redux';
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import history from '../history';
import { routerMiddleware } from 'connected-react-router'
import rootReducer from '../reducers';
import getInitialState from '../utils/get-initial-state';
const initialState = getInitialState();
// Add initial state here
const initialState = {
'home': {
'test': 'foo',
'loading': false,
'videos': []
}
};
const store = createStore(
rootReducer(history),
rootReducer,
initialState,
compose(
applyMiddleware(
routerMiddleware(history),
thunk
)
)
applyMiddleware(thunk)
);
export default store;

View File

@ -0,0 +1,4 @@
.site-logo{
max-width: 300px;
}

View File

@ -1,17 +0,0 @@
@import "variables";
/* footer */
footer {
background: $light-gray-color;
position: absolute;
width: 100%;
left: 0;
margin-top: 1em;
padding: 1em;
font-weight: bold;
}
.nav-footer {
a {
color: gray;
}
}

View File

@ -1,103 +0,0 @@
@import "variables";
/* globals */
* {
box-sizing: border-box;
margin: 0px;
border: 0px;
}
/* fonts */
@font-face {
font-family: "Fedra Arabic";
src: url("../assets/fonts/Fedra Arabic Reg_beta.ttf") format("truetype");
}
@font-face {
font-family: "bebas";
src: url("../assets/fonts/BEBAS___.ttf") format("truetype");
}
@font-face {
font-family: "majalla";
src: url("../assets/fonts/majalla 2.ttf") format("truetype");
}
@font-face {
font-family: "MyriadPro Regular";
src: url("../assets/fonts/MyriadPro-Regular.otf") format("otf");
}
@font-face {
font-family: "interstate";
src: url("../assets/fonts/Interstate-Regular.bmap") format("bmap"),
url("../assets/fonts/Interstate-Bold.bmap") format("bmap");
}
@font-face {
font-family: "interstate-light";
src: url("../assets/fonts/Interstate_Light.ttf") format("truetype");
}
@font-face {
font-family: "interstate-bold";
src: url("../assets/fonts/Interstate-Bold.ttf") format("truetype");
}
.text-left {
text-align: left;
}
.arabic-text {
font-family: "Fedra Arabic";
//padding: .3em;
font-weight: normal;
}
.english-text {
font-family: interstate-light, serif;
//padding: .3em;
}
.bold-english-text {
font-family: interstate-bold, serif;
}
/* App */
.App {
max-width: 1200px;
margin: 0 auto;
}
// buttons
button {
padding: 1em;
font-weight: bold;
font-size: 1em;
max-width: 300px;
justify-self: center; // for the css grid
cursor: pointer;
}
button:focus {outline:0 !important;}
// spans
span {
display: inline-block;
position: relative;
}
// links
a {
text-decoration: none;
font-size: 14px;
color: black;
}
.normal-link {
text-decoration: underline;
font-size: 1em;
color: black;
&:hover {
color: gray;
}
}

View File

@ -1,26 +0,0 @@
@import "variables";
@import "globals";
/* header */
header {
padding-top: 1em;
}
.site-logo {
max-width: 250px;
text-align: center;
}
.counter-container {
width: 18%;
position: absolute;
display: inline-block;
right: 0;
top: 0;
padding: 2em;
}
.counter {
position: relative;
right: 0;
}

View File

@ -1,43 +0,0 @@
@import "variables";
@import "globals";
// title
.all-items {
.section-heading {
padding-bottom: 1em;
}
.section-title span:before,
.section-title span:after {
width: 530px;
}
}
#search-topics {
font-size: 1em;
padding: 1em;
border: 0.5px solid gray;
height: 30px;
position: relative;
top: -3px;
left: 1px;
font-size: 0.7em;
}
.label {
font-size: 1.3em;
}
.topic-item {
h3 {
color: rgb(16, 16, 16);
&:hover {
color: gray;
}
text-align: left;
padding: 1em;
//font-size: 30px;
}
border-left: 2px solid black;
border-bottom: 6px solid black;
margin-bottom: 2em;
}

View File

@ -1,24 +0,0 @@
@import "variables";
/* loader */
.loading {
span {
background: $dark-gray-color;
border-radius: 50%;
margin: 2em 0.2em;
width: 12px;
height: 12px;
display: inline-block;
scale: 1;
animation: loading-animation 2s linear infinite forwards;
@keyframes loading-animation {
50% {
transform: scale(1.2);
}
100% {
transform: scale(1);
}
}
}
}

View File

@ -1,31 +0,0 @@
@import "variables";
@import "globals";
@import "header";
/* nav */
nav {
margin: 3em;
}
nav ul li {
display: inline-block;
list-style-type: none;
padding: 0em 3em;
border-right: 2px solid black;
.arabic-text{
font-size: 1.2em;
}
.english-text{
font-size: 1.2em;
font-family: interstate-bold;
}
}
nav ul li:last-child {
border-right: none;
}
nav ul li a {
text-decoration: none;
color: black;
}

View File

@ -1,127 +0,0 @@
@import "variables";
@import "globals";
.section-heading,
.section-subheading {
padding-top: 2em;
}
// TODO: Refactor
.section-title {
line-height: 0.5;
text-align: center;
}
// the bottom section
h3.section-title {
padding-top: 1em;
}
// --------------------------
// add horizontal lines around the section title.
//----------------------------
.section-title span:before,
.section-title span:after {
content: "";
position: absolute;
height: 8px;
border-bottom: 1.7px solid black;
top: 0;
width: 400px;
}
.section-title span:before {
right: 100%;
margin-right: 10px;
}
.section-title span:after {
left: 100%;
margin-left: 10px;
}
// Topics
.random-topics {
margin-top: .5em;
}
.random-section-title {
bottom: -3px;
}
// TODO: Refactor
// buttons
.random-item-container {
button {
background: white;
}
// view all and shuffle button
.view-items-link {
justify-self: left;
bottom: 36px;
position: relative;
padding: 0px;
}
.view-all-items {
left: 0;
//position: absolute;
justify-self: left;
padding: .9em 0px;
padding-right: 5px;
}
// shuffle
.shuffle-button {
justify-self: right;
bottom: 36px;
position: relative;
padding: 10px;
padding-right: 0px;
}
}
// fonts
.shuffle-button, .view-all-items {
span.arabic-text {
font-size: 18px;
}
span.english-text {
font-size: 16px;
}
}
.buttons-grid {
height: 8px;
}
span.english-text.bold-english-text{
font-size: 28px;
}
span.arabic-text.bold-arabic-text{
font-size: 28px;
}
// highlighted text
.highlighted-text:hover{
background: black;
color:white;
position: relative;
}
//.navbar-link-overlay {
// width: calc(100% + 6px);
// height: calc(100% - 3px - 2px);
// position: absolute;
// top: 3px;
// left: 0px;
// z-index: -1;
//}
//.navbar-link-neonblue:hover .navbar-link-overlay{
// background: black;
//}
// randome places map
.place-map {
max-width: 500px;
display: block;
min-height: 300px;
}

View File

@ -1,5 +0,0 @@
@import "variables";
@import "globals";
@import "header";
/* nav */

View File

@ -1,59 +0,0 @@
@import "variables";
@import "globals";
@import "header";
/* search */
.search-button {
background: transparent;
bottom: 4px;
position: relative;
right: -39px;
padding: 0px;
margin: 0px;
width: 126px;
}
.search-button img {
max-width: 26%;
}
.search-box {
padding: .9em 1em .9em 1em;
width: 30%;
background: $light-gray-color;
margin-right: 7em;
}
.search-box::placeholder {
color: black;
text-align: center;
font-size: 1.5em;
color: gray;
font-family: "Fedra Arabic";
font-weight: normal;
}
@media screen and (max-width: 700px) {
.search-box::placeholder {
font-size: 1em;
}
}
@media screen and (max-width: 400px) {
.search-box::placeholder {
font-size: .75em;
}
}
// filter
.filter-box{
//background: $light-gray-color;
//padding: 1em;
margin-bottom: 2em;
text-align: left;
}
.App form{
margin-top: 2em;
}

View File

@ -1,13 +0,0 @@
@import "variables";
@import "globals";
@import "header";
@import "nav";
@import "search";
@import "random-item";
@import "loading";
@import "video-item";
@import "video-player";
@import "footer";
@import "items-list";
@import "results";
@import "~video-react/styles/scss/video-react";

View File

@ -1,3 +0,0 @@
$dark-gray-color: #777;
$light-gray-color: #eaeaea;
$normal-link-color: blue;

View File

@ -1,35 +0,0 @@
@import "variables";
@import "globals";
@import "header";
/* Video item*/
.video-item {
background: $light-gray-color;
min-height: 300px;
padding: 1em;
color : rgb(16, 16, 16);
}
.video-thumbnail {
width: 100%;
max-height: 150px;
object-fit: cover;
transition: all .4s ease-in-out;
}
.video-thumbnail:hover {
transform: scale(1.1);
}
.video-thumbnail-container {
position: relative;
overflow: hidden;
}
.video-title {
padding-top: 1em;
font-weight: normal;
}
section.video-item:hover {
outline: 2px solid black;
}

View File

@ -1,20 +0,0 @@
@import "variables";
video{
margin-top: 3em;
}
.video-player-title
{
text-align: left;
padding: 1em 1em 0 1em;
background: $light-gray-color;
margin-top: 1em;
}
.video-player-date{
padding: 1em;
background: $light-gray-color;
text-align: left;
}
.video-react{
margin-top: 3em;
}

View File

@ -0,0 +1,9 @@
import React from 'react';
class Footer extends React.Component{
render(){
return(
'hello Footer!'
)
}
}
export default (Footer);

View File

@ -0,0 +1,24 @@
import React from 'react';
import logo from '../logo.png';
import '../styleSheets/style.css'
class Header extends React.Component {
render() {
const Logo = () => {
return (
<nav>
<img className="site-logo" src={logo} alt="logo 858 "/>
</nav>
);
}
return (
<header>
<section className="container">
<Logo/>
</section>
</header>
)
}
}
export default (Header);

View File

@ -0,0 +1,9 @@
import React from 'react';
class RandomDate extends React.Component{
render(){
return(
'hello Dandom Date!'
)
}
}
export default (RandomDate);

View File

@ -0,0 +1,9 @@
import React from 'react';
class RandomLocation extends React.Component{
render(){
return(
'hello Random Location!'
)
}
}
export default (RandomLocation);

View File

@ -0,0 +1,9 @@
import React from 'react';
class RandomTopic extends React.Component{
render(){
return(
'hello Random Topic!'
)
}
}
export default (RandomTopic);

View File

@ -0,0 +1,9 @@
import React from 'react';
class Search extends React.Component{
render(){
return(
'hello Search!'
)
}
}
export default (Search);

View File

@ -1,16 +1,6 @@
import config from '../config';
import 'whatwg-fetch';
const VIDEO_KEYS = [
"title",
"source",
"project",
"topic",
"language",
"duration",
"id",
"date"
];
/*
Base function to make API calls
@ -23,7 +13,6 @@ const VIDEO_KEYS = [
@returns {Promise} - Resolves with data if successful, else throws error.
*/
export function callApi(action, data) {
console.log('API Call', action, data);
let formData = new FormData();
formData.append('action', action);
formData.append('data', JSON.stringify(data));
@ -31,7 +20,7 @@ export function callApi(action, data) {
method: 'POST',
body: formData
})
.then(response => response.json()) // convert the response to json (instead of response object).
.then(response => response.json())
.then(data => {
if (data.status.code === 200) {
return data.data;
@ -51,7 +40,6 @@ export function callApi(action, data) {
@returns {Promise<Array>} array of topic objects like: {'name': '<topicName>', 'items': <no_of_items>}
*/
export function fetchAllTopics(startRange=0, endRange=1000) {
// the object that we need to send to the api
const data = {
"query": {
"conditions": [],
@ -110,11 +98,11 @@ export function fetchAllDates(startRange=0, endRange=1000) {
*/
export function fetchVideosByX(key, value, startRange, endRange, sortKey='random') {
const data = {
"keys": VIDEO_KEYS,
"keys": ["editable", "modified", "title", "source", "project", "topic", "language", "duration", "id"],
"query": {
"conditions": [{
"key": key,
"value": value,
"value": encodeURIComponent(value),
"operator": "=="
}],
"operator": "&"
@ -164,29 +152,12 @@ export function fetchVideosByDate(date, startRange=0, endRange=100, sortKey='ran
@param {Float} east - longitude of east bounds
*/
export function fetchPlaces(north, south, west, east, startRange=0, endRange=100) {
console.log("BAD: fetchPlaces called");
const data = {
"itemsQuery": {
"conditions": [],
"operator": "&"
},
"keys": [
"id",
"name",
"alternativeNames",
"geoname",
"countryCode",
"type",
"lat",
"lng",
"south",
"west",
"north",
"east",
"area",
"editable"
],
"keys": ["id", "name", "alternativeNames", "geoname", "countryCode", "type", "lat", "lng", "south", "west", "north", "east", "area", "editable"],
"query": {
"conditions": [{
"key": "lat",
@ -208,64 +179,30 @@ export function fetchPlaces(north, south, west, east, startRange=0, endRange=100
return callApi('findPlaces', data).then(data => data.items);
}
export function fetchPlaceItemCount(placeName) {
const data = {
"query": {
"conditions": [{
"key": "places",
"value": placeName
}],
"operator": "&"
}
};
return callApi('find', data).then(data => data.items);
}
/*
Fetches a random place
*/
export function fetchRandomPlace() {
const startRange = Math.floor(Math.random() * 50);
const endRange = startRange + 1;
const data = {
"itemsQuery": {
"conditions": [],
"operator": "&"
},
"keys": [
"id",
"name",
"items",
"alternativeNames",
"geoname",
"countryCode",
"type",
"lat",
"lng",
"south",
"west",
"north",
"east",
"area",
"editable"
],
"keys": ["id", "name", "alternativeNames", "geoname", "countryCode", "type", "lat", "lng", "south", "west", "north", "east", "area", "editable"],
"query": {
"conditions": [],
"operator": "&"
},
"range": [startRange, endRange],
"range": [0, 1],
"sort": [{
"key": "items",
"key": "random",
"operator": "-"
}]
};
return callApi('findPlaces', data).then(data => data.items[0]);
return callApi('findPlaces', data).then(data => data.items[0]);
}
export function fetchVideosByPlace(placeName, startRange=0, endRange=100, sortKey='random') {
return fetchVideosByX('places', placeName, startRange, endRange, sortKey);
}
export function fetchVideoById(id) {
return callApi('get', {'id': id, keys: VIDEO_KEYS});
export function fetchVideosByPlace(placeId, startRange=0, endRange=100, sortKey='random') {
return fetchVideosByX('place', placeId, startRange, endRange, sortKey);
}

View File

@ -1,14 +0,0 @@
import { getItem } from './safe-storage';
export default function getInitialState() {
let initialState = {
topics: {}
};
const allTopics = getItem('allTopics');
if (allTopics) {
initialState.topics.allTopics = JSON.parse(allTopics);
initialState.topics.loadingAllTopics = false;
}
return initialState;
}

View File

@ -1,5 +0,0 @@
export default function getRandomPlace(allPlaces, minVideos=3) {
const validPlaces = allPlaces.filter(place => place.items >= minVideos);
return validPlaces[Math.floor(Math.random() * validPlaces.length)];
}

View File

@ -1,5 +0,0 @@
export default function getRandomTopic(allTopics, minVideos=4) {
const validTopics = allTopics.filter(topic => topic.items >= minVideos);
return validTopics[Math.floor(Math.random() * validTopics.length)];
}

View File

@ -1,29 +0,0 @@
import config from '../config';
function getStaticMapURL(place, size='800x300') {
const area = place.area;
const zoom = getZoom(area);
return `https://api.mapbox.com/v4/mapbox.emerald/pin-s-marker(${place.lng},${place.lat})/${place.lng},${place.lat},${zoom},0,0/${size}.png?access_token=${config.mapboxKey}`;
}
function getZoom(area) {
if (area < 100000) {
return 16;
}
if (area < 200000) {
return 15;
}
if (area < 500000) {
return 14;
}
if (area < 1000000) {
return 13;
}
if (area < 2000000) {
return 12;
} else {
return 10;
}
}
export { getStaticMapURL };

View File

@ -1,40 +0,0 @@
// Transparent wrapper over Window.localStorage
// Adheres to the Web Storage API:
// https://developer.mozilla.org/en-US/docs/Web/API/Storage
/**
* Wraps localStorage.getItem in a try/catch. Return null
* if the key does not exist or localStorage fails.
*/
function getItem(key) {
try {
return localStorage.getItem(key) || null;
} catch (err) {
console.warn('Could not read from localStorage.');
return null;
}
}
/**
* Wraps localStorage.setItem in a try/catch.
*/
function setItem(key, value) {
try {
localStorage.setItem(key, value);
} catch (err) {
console.warn('Could not write to localStorage.');
}
}
/**
* Wraps localStorage.removeItem in a try/catch.
*/
function removeItem(key) {
try {
localStorage.removeItem(key);
} catch (err) {
console.warn('Could not delete from localStorage.');
}
}
export { getItem, setItem, removeItem };

View File

@ -1,9 +0,0 @@
import config from '../config';
export function getThumbnail(id, size='200') {
return `${config.baseUrl}/${id}/${size}p.jpg`
}
export function getVideo(id, size='480') {
return `${config.videoBase}/${id}/${size}p.mp4`;
}

1114
yarn.lock

File diff suppressed because it is too large Load Diff