Initial commit

This commit is contained in:
Zachary Seguin 2018-08-11 11:30:26 -04:00
commit 23357dfd20
34 changed files with 1441 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
__pycacahe__/
*.pyc
output/

124
Makefile Normal file
View File

@ -0,0 +1,124 @@
PY?=python3
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
FTP_HOST=localhost
FTP_USER=anonymous
FTP_TARGET_DIR=/
SSH_HOST=web1.cloud.csclub.uwaterloo.ca
SSH_PORT=22
SSH_USER=ztseguin
SSH_TARGET_DIR=/srv/http/cloud.csclub.uwaterloo.ca
S3_BUCKET=my_s3_bucket
CLOUDFILES_USERNAME=my_rackspace_username
CLOUDFILES_API_KEY=my_rackspace_api_key
CLOUDFILES_CONTAINER=my_cloudfiles_container
DROPBOX_DIR=~/Dropbox/Public/
GITHUB_PAGES_BRANCH=gh-pages
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
endif
help:
@echo 'Makefile for a pelican Web site '
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
@echo ' make clean remove the generated files '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
@echo ' make devserver [PORT=8000] start/restart develop_server.sh '
@echo ' make stopserver stop local server '
@echo ' make ssh_upload upload the web site via SSH '
@echo ' make rsync_upload upload the web site via rsync+ssh '
@echo ' make dropbox_upload upload the web site via Dropbox '
@echo ' make ftp_upload upload the web site via FTP '
@echo ' make s3_upload upload the web site via S3 '
@echo ' make cf_upload upload the web site via Cloud Files'
@echo ' make github upload the web site via gh-pages '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@echo ' '
html:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
clean:
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
regenerate:
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
serve:
ifdef PORT
cd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT)
else
cd $(OUTPUTDIR) && $(PY) -m pelican.server
endif
serve-global:
ifdef SERVER
cd $(OUTPUTDIR) && $(PY) -m pelican.server 80 $(SERVER)
else
cd $(OUTPUTDIR) && $(PY) -m pelican.server 80 0.0.0.0
endif
devserver:
ifdef PORT
$(BASEDIR)/develop_server.sh restart $(PORT)
else
$(BASEDIR)/develop_server.sh restart
endif
stopserver:
$(BASEDIR)/develop_server.sh stop
@echo 'Stopped Pelican and SimpleHTTPServer processes running in background.'
publish:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
ssh_upload: publish
scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)
rsync_upload: publish
rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
dropbox_upload: publish
cp -r $(OUTPUTDIR)/* $(DROPBOX_DIR)
ftp_upload: publish
lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"
s3_upload: publish
s3cmd sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl-public --delete-removed --guess-mime-type --no-mime-magic --no-preserve
cf_upload: publish
cd $(OUTPUTDIR) && swift -v -A https://auth.api.rackspacecloud.com/v1.0 -U $(CLOUDFILES_USERNAME) -K $(CLOUDFILES_API_KEY) upload -c $(CLOUDFILES_CONTAINER) .
github: publish
ghp-import -m "Generate Pelican site" -b $(GITHUB_PAGES_BRANCH) $(OUTPUTDIR)
git push origin $(GITHUB_PAGES_BRANCH)
.PHONY: html help clean regenerate serve serve-global devserver stopserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github

View File

@ -0,0 +1,62 @@
title: Advanced Networking
slug: docs/advanced-networking
status: hidden
## Static Networking
Information for the `MSO Intranet` networking:
Addresses are assigned from these ranges:
```
IPv4: 172.19.134.0/24
IPv6: 2620:101:f000:4903::/64
```
Network gateways:
```
IPv4 Gateway: 172.19.134.254 (NAT gateway)
Add routes to campus:
10.0.0.0/8 via 172.19.134.1
129.97.0.0/16 via 172.19.134.1
172.16.0.0/12 via 172.19.134.1
Please do not send on-campus traffic through the NAT gateway.
This may be blocked in the future.
IPv6 Gateway: 2620:101:f000:4903::1
```
## Firewall
### Campus Firewall
All machines in the CSC cloud are behind the Campus Firewall. The Campus
Firewall blocks all incoming traffic at the University border.
**We will not accept requests for exceptions to the campus firewall. All
inbound traffic originating from off-campus will be blocked.**
### OpenStack Security Groups
You can utilize OpenStack Security Groups to act as a firewall in front of your
host.
*More documentation about this will come at a later time.*
## Private Networking
See [OpenStack Horizon Documentation](https://docs.openstack.org/horizon/pike/user/create-networks.html) for
information about creating private networks.
### Disabling Port Security
Disabling port security is required if you are running a router on your network
(ie. traffic with source IPs different than your own).
*This cannot be done for the MSO Intranet network, however can be done for
private networks*.
This can only be done via the OpenStack command line and the API:
`openstack port set --disable-port-security --no-security-group [portid]`

View File

@ -0,0 +1,19 @@
title: Command Line Access
slug: docs/cli-access
status: hidden
The OpenStack command line interface has been installed on corn-syrup.
Set the following environment variables to authenticate with the CSC Cloud:
```bash
export OS_USERNAME=<username>
export OS_PROJECT_NAME=<username>
export OS_USER_DOMAIN_NAME=csclub
export OS_PROJECT_DOMAIN_NAME=csclub
export OS_AUTH_URL=https://auth.cloud.csclub.uwaterloo.ca/v3
export OS_IDENTITY_API_VERSION=3
```
Documentation on the command line is available from the OpenStack project:
[OpenStackClient](https://docs.openstack.org/python-openstackclient/latest/).

16
content/pages/docs.md Normal file
View File

@ -0,0 +1,16 @@
title: Documentation
slug: docs
## For users
- [Getting Started]({filename}getting-started.md)
- [CLI Access]({filename}cli-access.md)
- [Advanced Networking]({filename}advanced-networking.md)
A great resource is the [OpenStack user
guides](https://docs.openstack.org/ocata/user/) (Note: we are currently running
the Ocata version).
## For administrators
- [User Setup]({filename}user-setup.md)

23
content/pages/faq.md Normal file
View File

@ -0,0 +1,23 @@
title: Frequently Asked Questions
slug: faq
status: hidden
## Networking
### What IP ranges are available?
When you create a server on the `MSO Intranet` network, you are assigned an
IPv4 address in the range of `172.19.134.0/24` and an IPv6 address in the range
of `2620:101:f000:4903::/64`.
### How can I access my server?
To access your server you must be connected to the University's network. This
can be done via wired, wireless (Eduroam) or the
[VPN](https://uwaterloo.ca/information-systems-technology/services/virtual-private-network-vpn).
### I'm assigned a globally-routed IPv6 address. Why can't I access it from the internet?
All traffic to your server initiated from off-campus is blocked at the
University's border firewall. We are not accepting requests for exceptions at
this time.

View File

@ -0,0 +1,81 @@
title: Getting Started
slug: docs/getting-started
status: hidden
## Prerequisites
- **Beta**: You must request and be granted access from the <a
href="mailto:cloud@csclub.uwaterloo.ca">cloud@csclub.uwaterloo.ca</a> to use the
Computer Science Club Cloud. *Please include your CSC username when
requesting access*.
## Accessing the Dashboard
1. Go to [Computer Science Club Cloud
Dashboard](https://dashboard.cloud.csclub.uwaterloo.ca/)
2. Login with your Computer Science Club username and password
## Creating a server
1. On the Dashboard, open `Project` &#8594; `Compute` &#8594; `Instances`.
2. Click `Launch Instance`
3. Fill in instance details
- Select a name
- Choose `csc-mc` availability zone
4. Click next. Select an image
5. Click next. Choose a flavour
6. Click next. Select a network
- Select `MSO Intranet` (unless you are working with private networking,
see the Advanced Network Guide)
7. Click on `Key Pair`
- If you have not already uploaded a SSH key pair, upload your public key
- *This step is important. Without a SSH key, you will not be able to
access your VM.*
8. Click `Launch Instance`
> *If* everything works correctly, your VM *should* be provisioned.
## Accessing the server
The dashboard will show the IP addresses assigned to the VM. You can SSH
using the corresponding SSH private key.
The default username is typically the name of the distribution (e.g., `ubuntu`
for Ubuntu and `debian` for Debian).
**You cannot connect to your VM from the internet. You must connect by SSH'ing
from a CSC machine or by using on-campus ethernet, wireless or the
[Campus VPN](https://uwaterloo.ca/information-systems-technology/services/virtual-private-network-vpn).**
You may wish to configure an account password (using `passwd`) to allow access
via the console (see the next section).
## Oh no! I broke SSH / Networking / etc.
You can access the console through the dashboard. View the instance details (by
clicking its name) and then click on the `Console` tab.
The console may not accept keyboard / mouse input. If so, click on `Click here
to show only console` to access the fullscreen view.
## Mirrors
If possible, you should use
[mirror.csclub.uwaterloo.ca](http://mirror.csclub.uwaterloo.ca) as your mirror.
## Web Hosting
As you may have noticed, you cannot access your VM from the internet. To allow
access to your website, you have two options:
1. Proxy through `caffeine`. See the [CSC
wiki](https://wiki.csclub.uwaterloo.ca/Web_Hosting#Reverse_Proxy_.28Python.2C_Ruby.2C_Perl.2C_etc..29)
for more information
2. Configure on the CSC HAProxy load balancer. Contact
cloud@csclub.uwaterloo.ca with your domain name, username, instance IP
addresses and ports (or DNS hostname). TLS certificates are currently only
available for `*.csclub.cloud` domains (contact cloud@csclub.uwaterloo.ca to
register a `[yourusername-blah].csclub.cloud` hostname).

14
content/pages/home.md Normal file
View File

@ -0,0 +1,14 @@
Title: CSC Cloud (Beta)
URL:
save_as: index.html
sort: 0
The [Computer Science Club](https://csclub.uwaterloo.ca) is currently working on a private cloud environment (powered by [OpenStack](https://www.openstack.org)) to enhance our web hosting services. This will allow the club to offer private servers to our members.
## Thanks to our donors
Hardware for this project was provided by:
- Funding from the [Mathematics Endowment Fund](https://uwaterloo.ca/math-endowment-fund/)
- Funding from the [Student Life Endowment Fund](https://feds.ca/funding#fund-slef)
- Hardware donations from club members

View File

@ -0,0 +1,88 @@
title: Cloud (Beta) Usage Agreement
slug: usage-agreement
*This agreement, in its current form, applies to those participating in the CSC
Cloud Beta. This agreement may change at any time, with notice, during the beta
period and may change prior to general availability.*
## Introduction
The use of this system is governed by the Computer Science Club's [Machine
Usage Agreement](https://csclub.uwaterloo.ca/services/machine_usage)
and [Code of Conduct](https://csclub.uwaterloo.ca/about/code-of-conduct).
Please take the time to review these documents before using this system. The
Computer Science Club Executive and Systems Committee are responsible for
enforcing these policies.
This agreement is supplemental to the [Machine Usage
Agreement](https://csclub.uwaterloo.ca/services/machine_usage). It
acts primarily to emphasize certain points, but may add additional policies
specific to the Computer Science Club Cloud.
## Use
You may use this service for any purpose, except:
1. Commericial purposes (ex. ads, your startup, etc.)
2. Violation of any usage agreement, University policy, or law
### Eligibility
You may only use this service if:
1. Your membership is current, or
2. If you are a club representative, where use is for club purposes only
### Email
Under no circumstances shall unsolicited (ie. spam) email be sent using this
service.
## Service Level Agreement
### Uptime
> **The Computer Science Club makes no guarantee of availability of the service.**
We will do our best to keep the service available at all times, and provide
advanced notice of service.
### Data Integrity
> **The Computer Science Club makes no guarantee of data integrity.**
It is your responsibility to ensure that you have appropriate backups of all
data stored on the service. We are not responsible for any lost data
whatsoever.
## Auditing and Logging
The Computer Science Club Systems Committee keeps records ("logs") on the
service to:
1. Collect and store diagnostic information to aid in debugging hardware and
software issues;
2. Document manchine usage and activity;
3. Refer to for auditing purposes.
### Network Address Translation
The Computer Science Club uses Network Address Translation on IPv4 to allow
access to off-campus resources. All translations performed are logged with
source IP, destination IP, source port, destination port and timestamps
indicating the start and end of the translation.
### Use of Records
The logs contain records of user and machine activity. The Systems Committee
reserves the right to share these records with the University or local
law enforcement as required.
## User Agreement
I have read and understood the usage agreement of 16 August 2017, and I
agreee that my usage of the Computer Science Club will be in accordance with
this policy. I understand that I am responsible for all actions performed from
my account (or the services attached to it). Furthermore, I accept full legal
responsibility for all of the actions that I commit using the Computer Science
Club Cloud according to any and all applicable laws.

View File

@ -0,0 +1,41 @@
title: User Setup
slug: docs/admin/user-setup
status: hidden
## Option 1 (Recommended)
Use the `adduser.py` script, available at [https://git.uwaterloo.ca/zachary.seguin/csclub-cloud-scripts](https://git.uwaterloo.ca/zachary.seguin/csclub-cloud-scripts).
## Option 2
### 1. LDAP Configuration
A `userPassword` property must be added to a user's LDAP object before they can
successfully authenticate against our cloud environment.
1. Open ldapvi `ldapvi -Y GSSAPI`
2. Find the user, and add: `userPassword: {SASL}<username>@CSCLUB.UWATERLOO.CA`
3. Quit your editor
4. Type `y` to perform the changes
### 2. Add user project
All members will be assigned their own project. All instructions are executed
using the OpenStack command line client.
1. `openstack project create --domain csclub <username>`
2. `openstack role --project <username> --user <username> user`
### Appendix A: OpenStack Environment Variables
```sh
export OS_USERNAME=<username>
export OS_PASSWORD=<password>
export OS_PROJECT_NAME=csc
export OS_USER_DOMAIN_NAME=csclub
export OS_PROJECT_DOMAIN_NAME=csclub
export OS_AUTH_URL=https://auth.cloud.csclub.uwaterloo.ca/v3
export OS_IDENTITY_API_VERSION=3
```
NOTE: To control your project, change `OS_PROJECT_NAME` to your username.

103
develop_server.sh Executable file
View File

@ -0,0 +1,103 @@
#!/usr/bin/env bash
##
# This section should match your Makefile
##
PY=${PY:-python3}
PELICAN=${PELICAN:-pelican}
PELICANOPTS=
BASEDIR=$(pwd)
INPUTDIR=$BASEDIR/content
OUTPUTDIR=$BASEDIR/output
CONFFILE=$BASEDIR/pelicanconf.py
###
# Don't change stuff below here unless you are sure
###
SRV_PID=$BASEDIR/srv.pid
PELICAN_PID=$BASEDIR/pelican.pid
function usage(){
echo "usage: $0 (stop) (start) (restart) [port]"
echo "This starts Pelican in debug and reload mode and then launches"
echo "an HTTP server to help site development. It doesn't read"
echo "your Pelican settings, so if you edit any paths in your Makefile"
echo "you will need to edit your settings as well."
exit 3
}
function alive() {
kill -0 $1 >/dev/null 2>&1
}
function shut_down(){
PID=$(cat $SRV_PID)
if [[ $? -eq 0 ]]; then
if alive $PID; then
echo "Stopping HTTP server"
kill $PID
else
echo "Stale PID, deleting"
fi
rm $SRV_PID
else
echo "HTTP server PIDFile not found"
fi
PID=$(cat $PELICAN_PID)
if [[ $? -eq 0 ]]; then
if alive $PID; then
echo "Killing Pelican"
kill $PID
else
echo "Stale PID, deleting"
fi
rm $PELICAN_PID
else
echo "Pelican PIDFile not found"
fi
}
function start_up(){
local port=$1
echo "Starting up Pelican and HTTP server"
shift
$PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS &
pelican_pid=$!
echo $pelican_pid > $PELICAN_PID
mkdir -p $OUTPUTDIR && cd $OUTPUTDIR
$PY -m pelican.server $port &
srv_pid=$!
echo $srv_pid > $SRV_PID
cd $BASEDIR
sleep 1
if ! alive $pelican_pid ; then
echo "Pelican didn't start. Is the Pelican package installed?"
return 1
elif ! alive $srv_pid ; then
echo "The HTTP server didn't start. Is there another service using port" $port "?"
return 1
fi
echo 'Pelican and HTTP server processes now running in background.'
}
###
# MAIN
###
[[ ($# -eq 0) || ($# -gt 2) ]] && usage
port=''
[[ $# -eq 2 ]] && port=$2
if [[ $1 == "stop" ]]; then
shut_down
elif [[ $1 == "restart" ]]; then
shut_down
start_up $port
elif [[ $1 == "start" ]]; then
if ! start_up $port; then
shut_down
fi
else
usage
fi

92
fabfile.py vendored Normal file
View File

@ -0,0 +1,92 @@
from fabric.api import *
import fabric.contrib.project as project
import os
import shutil
import sys
import SocketServer
from pelican.server import ComplexHTTPRequestHandler
# Local path configuration (can be absolute or relative to fabfile)
env.deploy_path = 'output'
DEPLOY_PATH = env.deploy_path
# Remote server configuration
production = 'root@localhost:22'
dest_path = '/var/www'
# Rackspace Cloud Files configuration settings
env.cloudfiles_username = 'my_rackspace_username'
env.cloudfiles_api_key = 'my_rackspace_api_key'
env.cloudfiles_container = 'my_cloudfiles_container'
# Github Pages configuration
env.github_pages_branch = "gh-pages"
# Port for `serve`
PORT = 8000
def clean():
"""Remove generated files"""
if os.path.isdir(DEPLOY_PATH):
shutil.rmtree(DEPLOY_PATH)
os.makedirs(DEPLOY_PATH)
def build():
"""Build local version of site"""
local('pelican -s pelicanconf.py')
def rebuild():
"""`build` with the delete switch"""
local('pelican -d -s pelicanconf.py')
def regenerate():
"""Automatically regenerate site upon file modification"""
local('pelican -r -s pelicanconf.py')
def serve():
"""Serve site at http://localhost:8000/"""
os.chdir(env.deploy_path)
class AddressReuseTCPServer(SocketServer.TCPServer):
allow_reuse_address = True
server = AddressReuseTCPServer(('', PORT), ComplexHTTPRequestHandler)
sys.stderr.write('Serving on port {0} ...\n'.format(PORT))
server.serve_forever()
def reserve():
"""`build`, then `serve`"""
build()
serve()
def preview():
"""Build production version of site"""
local('pelican -s publishconf.py')
def cf_upload():
"""Publish to Rackspace Cloud Files"""
rebuild()
with lcd(DEPLOY_PATH):
local('swift -v -A https://auth.api.rackspacecloud.com/v1.0 '
'-U {cloudfiles_username} '
'-K {cloudfiles_api_key} '
'upload -c {cloudfiles_container} .'.format(**env))
@hosts(production)
def publish():
"""Publish to production via rsync"""
local('pelican -s publishconf.py')
project.rsync_project(
remote_dir=dest_path,
exclude=".DS_Store",
local_dir=DEPLOY_PATH.rstrip('/') + '/',
delete=True,
extra_opts='-c',
)
def gh_pages():
"""Publish to GitHub Pages"""
rebuild()
local("ghp-import -b {github_pages_branch} {deploy_path} -p".format(**env))

45
pelicanconf.py Normal file
View File

@ -0,0 +1,45 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
AUTHOR = 'Calum T. Dalek'
SITENAME = 'Computer Science Club Cloud'
SITEURL = ''
THEME = 'themes/csclub'
PATH = 'content'
PAGE_URL = '{slug}/'
PAGE_SAVE_AS = '{slug}/index.html'
TIMEZONE = 'Canada/Eastern'
DEFAULT_LANG = 'en'
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
# Main menu
# MENUITEMS = (('CSC Cloud', '/'),
DISPLAY_PAGES_ON_MENU = True
DISPLAY_CATEGORIES_ON_MENU = False
PAGE_ORDER_BY = 'sort'
# Blogroll
LINKS = (('Pelican', 'http://getpelican.com/'),
('Python.org', 'http://python.org/'),
('Jinja2', 'http://jinja.pocoo.org/'),
('You can modify those links in your config file', '#'),)
# Social widget
SOCIAL = (('You can add links in your config file', '#'),
('Another social link', '#'),)
DEFAULT_PAGINATION = 10
# Uncomment following line if you want document-relative URLs when developing
#RELATIVE_URLS = True

24
publishconf.py Normal file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
# This file is only used if you use `make publish` or
# explicitly specify it as your config file.
import os
import sys
sys.path.append(os.curdir)
from pelicanconf import *
SITEURL = 'https://cloud.csclub.uwaterloo.ca'
RELATIVE_URLS = False
FEED_ALL_ATOM = 'feeds/all.atom.xml'
CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'
DELETE_OUTPUT_DIRECTORY = True
# Following items are often useful when publishing
#DISQUS_SITENAME = ""
#GOOGLE_ANALYTICS = ""

View File

@ -0,0 +1,101 @@
body {
font-family: sans-serif;
font-size: 14px;
}
body > header {
display: flex;
justify-content: center;
padding: 15px 0;
}
body > header,
body > nav,
.content-wrapper,
body > footer {
max-width: 100%;
width: 920px;
margin: 0 auto;
}
body > nav {
background: #215498;
border-radius: 4px;
background-clip: border-box;
}
body > nav ul {
list-style: none;
margin: 0;
padding: 0;
overflow: hidden;
}
body > nav li {
float: left;
}
body > nav a {
display: inline-block;
color: white;
text-decoration: none;
padding: 10px;
}
body > nav a:hover,
body > nav .active a {
text-decoration: underline;
}
body > nav ul li:first-child a {
font-weight: bold;
}
.uw_logo {
width: 250px;
}
.csc_logo {
height: 100px;
}
body > footer {
font-size: 0.9em;
text-align: center;
color: #444;
margin-top: 20px;
padding-top: 20px;
border-top: 1px solid #ccc;
}
a {
color: #215499;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
p, li {
line-height: 1.4em;
}
.highlight, code {
background: #eee;
border-radius: 6px;
}
code {
padding: 0px 6px;
}
.highlight {
padding: 4px 10px;
border: 1px solid #aaa;
}
.highlight .nv { color: green; }
.highlight .nb { color: #aa0000; }
.highlight .o { color: #0000aa; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="463.81693"
height="235.42859"
viewBox="0 0 122.71822 62.290483"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="csc-logo.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="175.15937"
inkscape:cy="102.1515"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
units="px"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(4.5800272,-1.1265429)">
<flowRoot
xml:space="preserve"
id="flowRoot3697"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="scale(0.26458333)"><flowRegion
id="flowRegion3699"><rect
id="rect3701"
width="422.5"
height="42.857143"
x="-0.35714287"
y="188.94826" /></flowRegion><flowPara
id="flowPara3703" /></flowRoot> <text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.31380939px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.30941427"
x="59.965858"
y="59.398228"
id="text3793"
transform="scale(0.94662034,1.0563897)"><tspan
sodipodi:role="line"
x="59.965855"
y="59.398228"
id="tspan3791"
style="fill:#000000;stroke-width:0.30941427"><tspan
x="59.965858"
y="59.398228"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:8.76673794px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;stroke-width:0.30941427"
id="tspan3789">COMPUTER SCIENCE CLUB</tspan></tspan></text>
<path
style="fill:#000000;stroke-width:0.13363476"
d="M 22.813145,51.915478 C 15.510788,51.152166 8.881966,47.147417 4.8171837,41.043363 -0.73355844,32.707855 -0.70863837,22.023187 4.8810893,13.643401 6.5545698,11.134619 9.0345646,8.6686228 11.615849,6.9466558 20.303918,1.1508732 31.595821,1.4455264 40.007142,7.6875039 c 1.057815,0.7849976 2.747658,2.2859304 2.665801,2.3677871 -0.02511,0.02511 -0.583202,0.200698 -1.24021,0.390204 -0.657014,0.189506 -1.801522,0.633669 -2.543358,0.98703 -5.215035,2.484092 -8.894135,7.320645 -9.861116,12.96345 -0.273018,1.593194 -0.279471,4.412351 -0.01368,5.972511 0.41629,2.44348 1.384009,4.860719 2.802353,6.99992 0.737883,1.112906 3.657079,4.142679 3.991483,4.142679 0.117361,0 0.622075,-0.35175 1.121587,-0.781666 2.748278,-2.36537 4.7658,-5.745509 5.595456,-9.374577 0.233352,-1.020722 0.35582,-2.113414 0.449326,-4.009042 0.193765,-3.928116 0.694399,-6.416611 1.869872,-9.294524 1.230037,-3.011502 2.931466,-5.528537 5.415285,-8.011178 2.994541,-2.993122 6.156068,-4.9269102 10.058643,-6.1524957 5.432946,-1.7061915 11.573261,-1.4045336 16.827137,0.8266742 1.076175,0.4570267 1.100376,0.4607812 1.531922,0.2376213 0.85307,-0.4411403 3.274518,-1.2355986 4.791361,-1.5720088 9.158951,-2.0313014 18.616536,1.3071781 24.546336,8.664731 3.4471,4.277068 5.38565,9.80875 5.38565,15.367997 0,9.430491 -5.46941,18.118547 -13.962634,22.179375 -8.998592,4.302458 -19.428523,2.829838 -27.043935,-3.818382 -0.94026,-0.820843 -1.07887,-0.991873 -0.868624,-1.071785 0.137591,-0.0523 0.791384,-0.255987 1.452877,-0.452646 4.35247,-1.293982 8.190847,-4.532196 10.325698,-8.711189 1.421786,-2.783163 1.944021,-4.938692 1.952395,-8.058555 0.01193,-4.450059 -1.303504,-8.101533 -4.149794,-11.519141 -0.904012,-1.085467 -2.614628,-2.646144 -2.900368,-2.646144 -0.254399,0 -1.915461,1.480663 -2.730309,2.433786 -2.116836,2.47605 -3.449074,5.204479 -4.046781,8.287833 -0.142052,0.732795 -0.312682,2.462446 -0.383313,3.885575 -0.181787,3.66286 -0.592007,5.719271 -1.697921,8.51162 C 64.31724,49.135932 49.903666,55.345126 37.274633,50.249902 l -1.493547,-0.602575 -0.515707,0.263094 c -0.888058,0.453054 -3.147272,1.187071 -4.731353,1.537216 -2.611517,0.577249 -5.183364,0.733089 -7.72089,0.467841 z m 4.596084,-6.94196 c 0.661493,-0.07973 1.260218,-0.200202 1.330502,-0.267729 0.07992,-0.07679 -0.09888,-0.36023 -0.477348,-0.756706 -4.035714,-4.227753 -6.398996,-10.335011 -6.398996,-16.536466 0,-5.992865 2.232109,-11.949733 6.074469,-16.211032 0.484357,-0.537169 0.849889,-1.026439 0.812294,-1.087268 -0.03759,-0.06083 -0.684215,-0.1860407 -1.436938,-0.2782487 -1.569067,-0.19221 -3.775844,-0.110905 -5.381608,0.1982767 -5.78396,1.113672 -10.729172,5.14021 -12.9668264,10.557979 -2.1139419,5.118234 -1.7466685,10.871088 0.9986117,15.641951 3.5361957,6.145353 10.4076377,9.5875 17.4458397,8.739243 z M 50.0339,44.725363 c 5.310259,-1.088562 9.951098,-4.68956 12.32308,-9.561931 1.143704,-2.349317 1.659363,-4.625747 1.80113,-7.951267 0.103537,-2.428814 0.261517,-3.714438 0.665649,-5.416997 0.917641,-3.865928 2.669916,-7.321897 5.273538,-10.400876 0.69864,-0.826195 1.028612,-1.312579 0.917217,-1.351986 -0.09569,-0.03385 -0.683561,-0.1233677 -1.306377,-0.1989227 -6.087388,-0.7384737 -12.210669,1.7959857 -15.972695,6.6111837 -2.496674,3.195612 -3.808756,6.982678 -3.808756,10.99322 0,6.031681 -2.542109,12.475446 -6.586262,16.694937 -0.532093,0.555162 -0.534075,0.561035 -0.216022,0.640019 1.608772,0.39951 4.810379,0.372922 6.909498,-0.05738 z m 42.121373,0.0605 c 6.924173,-1.379196 12.316407,-6.635559 13.915297,-13.564655 0.39257,-1.701276 0.4828,-4.78865 0.1917,-6.559417 C 104.71995,15.279803 96.148843,8.7448916 86.812388,9.8325353 c -0.770361,0.08974 -1.446292,0.1913727 -1.502071,0.2258447 -0.05578,0.03447 0.364045,0.604001 0.932939,1.265621 5.003099,5.818596 7.028931,13.578409 5.491051,21.033102 -0.866055,4.198106 -2.859624,8.164732 -5.756756,11.454272 -0.751549,0.853345 -0.774975,0.900885 -0.48002,0.974104 1.450649,0.360111 4.85077,0.360306 6.657742,5.29e-4 z"
id="path3723"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,247 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 223.33333 56"
height="56"
width="223.33333"
xml:space="preserve"
version="1.1"
id="svg2"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
id="clipPath32"
clipPathUnits="userSpaceOnUse"><path
id="path34"
d="m 0,0 167.5,0 0,42 L 0,42 0,0 Z" /></clipPath></defs><g
transform="matrix(1.3333333,0,0,-1.3333333,0,56)"
id="g10"><g
transform="translate(45.9624,26.0979)"
id="g12"><path
id="path14"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 3.223,0 2.826,-9.246 3.066,9.286 2.574,0 3.064,-9.286 2.829,9.246 3.141,0 -4.666,-13.754 -2.611,0 -3.081,8.933 -3.086,-8.933 -2.614,0" /></g><g
transform="translate(71.4436,26.1007)"
id="g16"><path
id="path18"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 2.772,0 5.851,-13.757 -3.14,0 -1.249,3.066 -5.774,0 -1.25,-3.066 -3.065,0 m 9.017,5.719 -1.813,4.427 -1.814,-4.427" /></g><g
transform="translate(83.3424,23.2318)"
id="g20"><path
id="path22"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 -4.155,0 0,2.769 11.318,0 0,-2.769 -4.154,0 0,-10.889 -3.009,0" /></g><g
transform="translate(92.7909,26.0016)"
id="g24"><path
id="path26"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 10.302,0 0,-2.669 -7.316,0 0,-2.772 6.44,0 0,-2.677 -6.44,0 0,-2.868 7.413,0 0,-2.672 -10.399,0" /></g><g
id="g28"><g
clip-path="url(#clipPath32)"
id="g30"><g
transform="translate(106.4226,26.0016)"
id="g36"><path
id="path38"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 6.246,0 c 1.735,0 3.081,-0.487 3.98,-1.387 0.76,-0.759 1.17,-1.83 1.17,-3.117 l 0,-0.042 c 0,-2.206 -1.189,-3.591 -2.927,-4.235 l 3.335,-4.877 -3.513,0 -2.926,4.371 -2.358,0 0,-4.371 -3.007,0 m 6.049,7.024 c 1.465,0 2.304,0.78 2.304,1.932 l 0,0.038 c 0,1.288 -0.9,1.952 -2.363,1.952 l -2.983,0 0,-3.922" /></g><g
transform="translate(121.1346,26.0016)"
id="g40"><path
id="path42"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 3.003,0 0,-10.927 6.396,0 0,-2.731 -9.399,0" /></g><g
transform="translate(130.9953,19.1345)"
id="g44"><path
id="path46"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 0,0.04 c 0,3.88 3.063,7.063 7.283,7.063 4.211,0 7.238,-3.142 7.238,-7.025 l 0,-0.038 c 0,-3.886 -3.065,-7.066 -7.279,-7.066 C 3.028,-7.026 0,-3.884 0,0 m 11.376,0 0,0.04 c 0,2.337 -1.715,4.291 -4.134,4.291 -2.42,0 -4.099,-1.913 -4.099,-4.253 l 0,-0.038 c 0,-2.341 1.717,-4.295 4.14,-4.295 2.416,0 4.093,1.911 4.093,4.255" /></g><g
transform="translate(146.3582,19.1345)"
id="g48"><path
id="path50"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 0,0.04 c 0,3.88 3.063,7.063 7.276,7.063 4.217,0 7.241,-3.142 7.241,-7.025 l 0,-0.038 c 0,-3.886 -3.063,-7.066 -7.278,-7.066 C 3.024,-7.026 0,-3.884 0,0 m 11.377,0 0,0.04 c 0,2.337 -1.716,4.291 -4.138,4.291 -2.417,0 -4.097,-1.913 -4.097,-4.253 l 0,-0.038 c 0,-2.341 1.718,-4.295 4.134,-4.295 2.42,0 4.101,1.911 4.101,4.255" /></g><g
transform="translate(53.5874,32.9135)"
id="g52"><path
id="path54"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 0,3.596 1.385,0 0,-3.561 c 0,-1.024 0.512,-1.554 1.357,-1.554 0.846,0 1.358,0.513 1.358,1.51 l 0,3.605 1.384,0 0,-3.55 c 0,-1.907 -1.07,-2.842 -2.76,-2.842 C 1.034,-2.796 0,-1.852 0,0" /></g><g
transform="translate(62.7537,36.5094)"
id="g56"><path
id="path58"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 1.277,0 2.949,-3.875 0,3.875 1.367,0 0,-6.294 -1.179,0 -3.047,4.002 0,-4.002 -1.367,0" /></g><path
id="path60"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 72.283,36.51 1.385,0 0,-6.294 -1.385,0 0,6.294 z" /><g
transform="translate(77.0661,36.5094)"
id="g62"><path
id="path64"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 1.527,0 3.173,-4.432 4.819,0 6.311,0 3.768,-6.338 l -1.224,0" /></g><g
transform="translate(86.7115,36.5094)"
id="g66"><path
id="path68"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 4.748,0 0,-1.232 -3.372,0 0,-1.276 2.967,0 0,-1.231 -2.967,0 0,-1.324 3.415,0 0,-1.231 -4.791,0" /></g><g
transform="translate(97.8873,33.4526)"
id="g70"><path
id="path72"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0.674,0 1.061,0.36 1.061,0.891 l 0,0.017 c 0,0.593 -0.414,0.9 -1.088,0.9 l -1.375,0 0,-1.808 m -1.385,3.057 2.877,0 c 0.8,0 1.421,-0.225 1.834,-0.64 0.35,-0.35 0.539,-0.844 0.539,-1.437 l 0,-0.018 c 0,-1.016 -0.548,-1.654 -1.348,-1.951 l 1.537,-2.248 -1.618,0 -1.349,2.015 -1.087,0 0,-2.015 -1.385,0" /></g><g
transform="translate(103.5326,31.1336)"
id="g74"><path
id="path76"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 0.818,0.979 c 0.567,-0.467 1.159,-0.764 1.88,-0.764 0.566,0 0.907,0.225 0.907,0.593 l 0,0.019 c 0,0.35 -0.215,0.53 -1.267,0.799 C 1.07,1.95 0.252,2.301 0.252,3.55 l 0,0.019 c 0,1.142 0.917,1.897 2.203,1.897 0.916,0 1.699,-0.288 2.337,-0.8 L 4.072,3.622 C 3.516,4.009 2.967,4.243 2.437,4.243 1.907,4.243 1.628,4 1.628,3.695 l 0,-0.018 C 1.628,3.263 1.898,3.129 2.986,2.85 4.261,2.517 4.981,2.058 4.981,0.962 l 0,-0.018 C 4.981,-0.305 4.028,-1.007 2.669,-1.007 1.718,-1.007 0.755,-0.675 0,0" /></g><path
id="path78"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 112.146,36.51 1.385,0 0,-6.294 -1.385,0 0,6.294 z" /><g
transform="translate(118.9331,35.2324)"
id="g80"><path
id="path82"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 -1.915,0 0,1.277 5.214,0 0,-1.277 -1.915,0 0,-5.016 -1.384,0" /></g><g
transform="translate(127.4285,32.6979)"
id="g84"><path
id="path86"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 -2.419,3.811 1.619,0 1.501,-2.525 1.528,2.525 1.573,0 -2.417,-3.785 0,-2.507 -1.385,0" /></g><g
transform="translate(144.3397,33.3448)"
id="g88"><path
id="path90"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 0,0.017 c 0,1.079 -0.791,1.979 -1.907,1.979 -1.113,0 -1.886,-0.88 -1.886,-1.96 l 0,-0.019 c 0,-1.077 0.79,-1.977 1.906,-1.977 C -0.773,-1.96 0,-1.079 0,0 m -5.242,0 0,0.017 c 0,1.791 1.412,3.255 3.355,3.255 1.941,0 3.334,-1.447 3.334,-3.236 l 0,-0.019 c 0,-1.788 -1.411,-3.254 -3.354,-3.254 -1.941,0 -3.335,1.448 -3.335,3.237" /></g><g
transform="translate(148.761,36.5094)"
id="g92"><path
id="path94"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 4.792,0 0,-1.258 -3.408,0 0,-1.341 3.003,0 0,-1.258 -3.003,0 0,-2.437 -1.384,0" /></g><g
transform="translate(26.7662,1.8769)"
id="g96"><path
id="path98"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 -0.368,0.171 c -4.085,1.89 -7.381,4.637 -9.535,7.94 -5.163,7.923 -5.334,16.107 -5.514,24.772 -0.014,0.656 -0.028,1.315 -0.044,1.974 l -0.021,0.896 30.947,0 -0.022,-0.896 C 15.427,34.194 15.412,33.531 15.4,32.871 15.218,24.211 15.046,16.029 9.884,8.111 7.736,4.813 4.445,2.068 0.367,0.171" /></g><g
transform="translate(26.6949,26.9619)"
id="g100"><path
id="path102"
style="fill:#ffd74f;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 -12.126,-9.545 c -1.948,6.035 -1.894,12.346 -2.051,18.773 l 28.29,0 C 13.957,2.785 14.03,-3.5 12.067,-9.55" /></g><g
transform="translate(36.5139,12.2649)"
id="g104"><path
id="path106"
style="fill:#ffd74f;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -0.298,-0.531 -0.619,-1.059 -0.962,-1.586 -2.156,-3.311 -5.359,-5.763 -8.882,-7.398 -3.537,1.635 -6.738,4.087 -8.897,7.398 -0.336,0.515 -0.941,1.55 -0.941,1.55 l 9.864,7.87" /></g><g
transform="translate(18.3941,31.344)"
id="g108"><path
id="path110"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C -1.432,0.304 -2.708,1.369 -2.4,2.721 -2.397,2.733 -2.456,3.07 -2.579,3.116 -2.589,3.12 -2.609,3.159 -2.63,3.164 -2.685,3.178 -2.73,3.201 -2.776,3.235 -2.792,3.247 -2.859,3.269 -2.859,3.292 -2.885,3.237 -2.88,3.186 -2.917,3.137 -2.931,3.118 -2.952,3.091 -2.972,3.08 -2.998,3.067 -3,3.043 -3.019,3.025 -3.128,2.917 -3.07,2.753 -3.053,2.63 -3.049,2.599 -3.035,2.56 -3.073,2.553 -3.119,2.545 -3.082,2.565 -3.136,2.599 c -0.012,0.008 -0.03,0.028 -0.043,0.034 -0.022,0.01 -0.112,0.022 -0.127,0.044 -0.017,0.024 -0.01,0.032 -0.031,0.051 -0.049,0.044 -0.055,0.133 -0.09,0.225 -0.007,0.016 -0.021,0.096 -0.021,0.114 0,0.092 -0.234,0.239 -0.144,0.163 C -3.56,3.204 -3.597,3.267 -3.721,3.298 -3.8,3.318 -3.892,3.314 -3.98,3.303 -3.999,3.299 -4.017,3.284 -4.03,3.274 -4.121,3.204 -4.205,3.119 -4.323,3.114 c 0.019,0.014 0.03,-0.01 0.039,-0.021 0.056,-0.073 0.016,-0.163 0.049,-0.243 0.033,-0.079 0.091,-0.138 0.158,-0.193 0.064,-0.05 0.179,0.016 0.228,-0.073 0,0.003 0.107,-0.025 0.002,-0.13 C -4.039,2.26 -4.253,2.417 -4.413,2.056 -4.171,2.161 -4.144,1.792 -4.042,1.779 -3.58,1.715 -3.229,1.634 -2.975,1.166 -2.82,0.88 -3.252,0.867 -2.862,0.8 -2.663,0.767 -2.53,0.666 -2.43,0.525 c 0.106,-0.148 0.12,-0.346 0.233,-0.484 0.082,-0.099 0.112,-0.118 0.211,-0.201 0.045,-0.037 0.187,-0.074 0.24,-0.088 0.053,-0.014 0.085,-0.04 0.136,-0.058 0.054,-0.02 0.111,-0.039 0.157,-0.076 0.038,-0.033 0.136,-0.066 0.158,-0.112 0.041,-0.078 0.008,-0.157 0.051,-0.237 0.013,-0.022 0.074,-0.002 0.099,-0.01 0.024,-0.01 0.079,-0.012 0.093,-0.01 0.094,0.023 0.117,0.029 0.187,0.037 0.106,0.012 0.094,-0.021 0.233,-0.014 0.029,0 0.04,-0.023 0.081,-0.023 0.026,0 0.073,-0.028 0.081,-0.004 0.041,0.132 0.11,0.258 0.188,0.387 0.077,0.127 0.071,0.139 0.168,0.274 C -0.125,-0.098 0.012,-0.002 0,0" /></g><g
transform="translate(14.8192,31.177)"
id="g112"><path
id="path114"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.42,-0.227 0.363,-0.784 0.741,-0.964 1.414,-1.285 2.217,-1.505 2.932,-1.153 2.773,-1.651 2.949,-2.067 2.88,-2.123 2.655,-2.303 1.972,-2.089 1.534,-1.916 1.233,-1.795 0.989,-2.243 0.656,-2.204 c 0.018,0.038 0.055,0.154 0.033,0.225 -0.053,0.161 -0.094,0.208 -0.363,0.178 -0.174,-0.021 -0.102,-0.163 -0.362,-0.292 -0.104,0.062 -0.324,0.13 -0.355,-0.066 -0.016,-0.091 -0.199,0.318 -0.161,0.386 0.17,0.306 0.204,0.377 0.192,0.443 -0.02,0.101 -0.39,0.237 -0.437,0.152 -0.114,-0.201 -0.453,0.649 0.546,0.594 -0.269,0.173 -0.238,0.204 -0.175,0.409 0.008,0.028 -0.093,0.135 -0.162,0.062 -0.022,0.079 0.032,0.165 0.094,0.173 C -0.33,0.082 -0.168,0.091 0,0" /></g><g
transform="translate(16.8083,33.2369)"
id="g116"><path
id="path118"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.607,-0.14 1.514,0.643 2.04,-0.28 1.652,-0.139 0.502,-0.754 0,0" /></g><g
transform="translate(21.8818,31.8949)"
id="g120"><path
id="path122"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -0.012,-0.79 -0.831,-1.644 -0.167,-2.397 -0.271,0.004 -0.593,0.098 -0.782,0.252 -0.105,0.086 -0.082,-0.377 -0.068,-0.472 0.013,-0.082 -0.503,0.487 -0.698,0.348 -0.547,-0.394 -0.785,-0.557 -1.6,-0.586 -0.225,-0.009 -0.344,-0.191 -0.407,-0.389 -0.185,0.377 -0.048,1.236 0.058,1.616 0.289,1.046 1.337,1.356 2.18,1.856 0.605,0.36 0.863,1.062 0.833,1.747 C -0.224,1.439 0.009,0.672 0,0" /></g><g
transform="translate(18.0276,22.9928)"
id="g124"><path
id="path126"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0.102,-0.022 0.026,-0.107 -0.014,-0.134 -0.084,-0.055 -0.142,-0.124 -0.194,-0.207 -0.041,-0.062 -0.069,-0.129 -0.054,-0.206 0.011,-0.057 0.029,-0.107 0.051,-0.158 0.014,-0.031 0.043,-0.05 0.066,-0.076 0.01,-0.01 0.047,-0.057 0.048,-0.061 -0.022,0.08 0.09,0.16 0.116,0.145 0.522,-0.302 0.552,0.311 0.865,0.519 0.133,0.089 0.432,-0.013 0.355,-0.285 0.312,0.167 0.403,0.585 0.646,0.848 C 2.422,0.967 3.173,1.353 3.887,1.669 3.628,1.943 3.249,2.173 3.056,2.487 2.961,2.642 2.847,2.947 3.058,2.891 3.935,2.662 4.427,3.197 4.524,3.888 5.823,3.72 6.161,4.948 6.337,5.877 6.421,6.327 6.668,6.366 6.399,7.133 6.286,7.454 6.975,7.559 6.858,8.113 6.825,8.266 6.635,8.42 6.524,8.439 6.63,8.139 6.131,8.065 6.076,7.942 5.991,7.751 5.868,7.598 5.851,7.398 5.428,7.983 5.771,8.689 6.168,9.237 6.748,10.036 7.95,9.616 8.456,9.1 8.465,9.359 8.265,9.688 8.1,9.847 8.574,9.908 9.087,9.618 9.734,9.961 c 0.372,0.198 0.748,0.368 0.923,0.808 C 9.864,10.66 8.79,11.271 8.076,11.395 6.745,11.626 5.851,10.718 5.374,9.634 4.9,8.553 5.204,7.745 5.719,6.937 5.848,6.732 5.262,6.866 5.03,6.747 4.805,6.63 4.714,6.352 4.764,6.106 5.048,6.412 5.801,6.224 5.869,5.702 5.962,4.998 5.252,3.972 4.566,4.28 3.832,4.609 3.416,5.383 3.172,6.255 2.545,5.715 1.384,6.161 0.846,5.633 0.333,5.131 1.645,4.791 2.155,4.555 2.343,4.466 2.531,4.274 2.5,4.037 1.7,4.507 0.737,3.974 0.785,3.119 0.82,2.481 1.601,2.084 2.253,2.03 2.524,2.008 2.687,1.705 2.357,1.499 1.779,1.138 1.135,0.735 0.512,1.389 0.408,1.498 0.034,1.429 -0.039,1.231 -0.076,1.135 -0.087,0.986 -0.072,0.889 -0.038,0.949 0.001,1.033 0.054,1.025 0.115,1.018 0.19,0.952 0.182,0.906 0.127,0.587 -0.292,0.794 -0.423,0.545 -0.426,0.54 -0.433,0.534 -0.436,0.529 -0.444,0.508 -0.455,0.491 -0.464,0.472 -0.549,0.303 -0.667,0.196 -0.457,0.065 c -0.005,0.031 0.104,-0.136 0.102,-0.165 0.01,0.155 0.17,0.152 0.17,0.152 l 0.093,-0.011" /></g><g
transform="translate(15.3212,26.0008)"
id="g128"><path
id="path130"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -0.083,0.026 -0.169,-0.005 -0.25,-0.042 -0.052,-0.023 -0.115,0.002 -0.146,-0.051 -0.02,-0.032 -0.032,-0.068 -0.022,-0.105 0.006,-0.018 0.014,-0.056 0.031,-0.067 -0.11,0.009 -0.213,0.083 -0.297,0.158 -0.027,0.025 -0.043,0.052 -0.07,0.079 -0.017,0.019 -0.015,0.05 -0.026,0.075 -0.012,0.025 -0.006,0.054 -0.007,0.08 -0.003,0.075 -0.005,0.153 0.029,0.223 0.016,0.031 0.032,0.065 0.055,0.093 0.018,0.022 0.035,0.04 0.056,0.06 0.056,0.054 0.118,0.096 0.193,0.117 0.108,0.033 0.225,0.023 0.33,-0.022 C -0.043,0.562 0.056,0.566 0.142,0.542 0.188,0.529 0.275,0.663 0.212,0.678 -0.061,0.744 -0.06,0.819 -0.162,1.094 -0.209,1.148 -0.271,1.086 -0.298,1.058 -0.299,1.587 0.328,1.621 0.591,1.412 0.979,1.099 0.687,0.489 1.164,0.32 1.413,0.232 1.676,0.164 1.933,0.272 2.393,0.468 1.934,0.932 2.082,1.324 2.383,2.114 3.05,2.157 3.844,1.394 3.134,1.159 2.802,0.218 3.19,-0.401 2.564,-0.155 1.774,-0.568 1.334,-0.85 1.743,-0.44 1.168,-0.109 1.024,-0.182 L 0.849,-0.303 C 0.765,-0.409 0.759,-0.519 0.656,-0.62 0.598,-0.676 0.565,-0.687 0.49,-0.707 0.385,-0.734 0.321,-0.725 0.229,-0.665 0.211,-0.654 0.156,-0.678 0.145,-0.692 0.094,-0.753 0.144,-0.784 0.142,-0.807 c -0.01,0.008 -0.075,0.061 -0.084,0.069 -0.06,0.043 -0.128,0.083 -0.164,0.142 -0.038,0.062 -0.063,0.215 -0.02,0.3 0.04,0.083 0.124,0.108 0.18,0.164 0.052,0.053 -0.011,0.135 -0.074,0.144" /></g><g
transform="translate(30.5651,32.9824)"
id="g132"><path
id="path134"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0.057,-0.036 -0.004,-0.139 -0.069,-0.157 -0.076,-0.021 -0.183,0.011 -0.25,-0.015 -0.298,-0.109 -0.299,-0.845 -0.258,-0.759 0.045,0.094 0.266,0.033 0.407,0.004 0.231,-0.046 0.406,0.422 0.557,0.409 0.359,-0.032 0.694,-0.478 0.831,-0.772 0.024,-0.053 -0.15,-0.055 -0.162,-0.235 0.489,0.045 0.902,-0.272 1.254,-0.563 0.173,0.3 0.346,0.485 0.542,0.68 C 2.117,-0.693 0.656,-0.472 0.881,0.831 0.911,0.999 0.722,1.146 0.638,1.228 0.543,1.319 0.327,1.325 0.194,1.355 0.333,1.067 0.082,1.039 0.117,0.581 0.117,0.565 0.076,0.576 0.061,0.582 -0.027,0.619 -0.102,0.675 -0.186,0.726 -0.261,0.773 -0.332,0.761 -0.416,0.749 -0.466,0.741 -0.513,0.718 -0.556,0.688 -0.625,0.638 -0.66,0.574 -0.709,0.504 -0.719,0.491 -0.728,0.475 -0.739,0.464 -0.754,0.448 -0.786,0.399 -0.788,0.374 -0.75,0.378 -0.631,0.368 -0.611,0.337 -0.577,0.283 -0.576,0.223 -0.535,0.172 -0.486,0.107 -0.443,0.105 -0.37,0.075 -0.255,0.026 -0.153,0.004 -0.028,0.015" /></g><g
transform="translate(32.4656,33.5074)"
id="g136"><path
id="path138"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.458,0.034 0.913,0.386 1.421,-0.209 1.327,-0.164 1.218,-0.149 1.161,-0.195 0.6,-0.647 -0.082,-0.495 -0.442,0.067 -0.295,0.089 -0.118,-0.009 0,0" /></g><g
transform="translate(34.4505,31.8424)"
id="g140"><path
id="path142"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0.755,0.381 1.516,0.688 1.827,1.623 0.06,0.183 0.2,-0.272 0.208,-0.297 0.4,-1.142 -0.395,-2.276 -0.233,-3.441 -0.264,0.163 -0.564,0.274 -0.854,0.283 -1.036,0.03 -1.281,-0.599 -1.339,-0.541 -0.285,0.287 -1.1,0.534 -1.04,0.479 C -1.915,-1.446 -0.519,-0.265 0,0" /></g><g
transform="translate(32.3895,24.246)"
id="g144"><path
id="path146"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.103,-0.16 -0.034,0.091 0.084,-0.181 0.629,0.048 1.195,0.31 1.797,0.065 1.53,1.292 2.427,1.59 2.497,1.773 2.611,2.069 2.012,2.654 1.561,2.49 0.985,2.284 1.225,1.558 1.117,1.05 1.057,0.769 0.708,0.562 0.419,0.663 -0.057,0.826 -0.249,1.269 -0.366,1.768 -0.445,2.1 -1.09,2.139 -1.23,1.868 -1.625,1.097 -0.994,1.957 -1.035,1.373 -1.042,1.273 -1.498,1.348 -1.6,1.001 -1.669,0.765 -1.445,0.607 -1.163,0.524 -1.112,0.509 -1.218,0.641 -1.147,0.671 -1.096,0.69 -0.89,0.58 -0.913,0.565 -1.185,0.4 -1.255,0.015 -0.77,-0.153 -0.767,-0.154 -0.805,-0.014 -0.769,0.013 -0.389,0.296 0.006,-0.009 0.006,0" /></g><g
transform="translate(24.1812,16.4836)"
id="g148"><path
id="path150"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.454,-0.209 0.601,0.016 1.198,0.112 1.28,0.126 1.616,-0.092 1.714,-0.204 1.117,-0.298 0.388,-0.819 0,0" /></g><g
transform="translate(23.9382,16.0061)"
id="g152"><path
id="path154"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C -0.027,0.031 -0.067,0.043 -0.104,0.058 -0.141,0.075 -0.181,0.089 -0.224,0.094 -0.234,0.097 -0.31,0.114 -0.321,0.118 -0.324,0.091 -0.288,0.021 -0.309,0.004 -0.356,-0.04 -0.373,-0.029 -0.412,-0.087 -0.426,-0.11 -0.44,-0.132 -0.446,-0.158 -0.457,-0.21 -0.479,-0.27 -0.487,-0.329 c -0.001,-0.03 0.012,-0.102 0.018,-0.128 0.004,-0.015 0.036,-0.08 0.045,-0.097 0,0 0.072,-0.078 0.069,-0.075 0.084,-0.086 0.014,-0.036 0.118,-0.139 0.053,-0.049 -0.024,-0.135 -0.074,-0.122 -0.352,0.102 -0.401,0.51 -0.721,0.634 -0.232,0.09 -0.567,-0.091 -0.603,-0.445 0.079,0.023 0.161,-0.007 0.176,-0.073 0.086,-0.357 0.609,-0.143 0.622,-0.395 0.009,-0.164 -0.392,0.029 -0.55,-0.077 -0.21,-0.14 -0.237,-0.541 -0.053,-0.775 0.19,0.18 0.427,-0.084 0.612,0.047 0.129,0.093 0.176,0.224 0.308,0.283 0.402,0.177 0.52,-0.193 0.431,-0.566 0.218,0.101 0.728,0.207 0.846,0.239 0.211,0.058 0.221,0.546 0.48,0.726 -0.368,0.001 -0.822,0.161 -0.924,0.52 -0.011,0.038 0.016,0.082 0.019,0.125 0.009,0.137 -0.003,0.27 -0.056,0.395 -0.005,0.013 -0.018,0.03 -0.028,0.047 -0.014,0.019 -0.027,0.04 -0.041,0.061 -0.036,0.051 -0.091,0.074 -0.143,0.108 -0.022,0.015 -0.052,0.019 -0.069,0.042" /></g><g
transform="translate(21.2365,13.474)"
id="g156"><path
id="path158"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0.161,-0.313 -0.632,0.188 -0.93,-0.275 -0.094,-0.149 -0.043,-0.484 -0.043,-0.673 0.182,0.166 0.363,-0.149 0.704,0.153 0.037,-0.034 0.078,-0.055 0.026,-0.108 -0.125,-0.127 -0.196,-0.286 -0.129,-0.437 0.041,-0.099 0.323,-0.299 0.325,-0.281 0.03,0.203 0.378,0 0.432,0.4 0.024,0.166 0.072,0.441 0.312,0.34 0.218,-0.09 0.263,-0.337 0.212,-0.583 0.348,0.115 0.96,0.472 1.326,0.207 0.491,-0.354 1.298,-0.501 1.873,-0.68 C 3.726,-1.671 3.605,-0.98 3.669,-0.53 2.763,-0.708 1.814,-0.678 0.975,-0.29 0.745,-0.183 0.776,0.082 0.707,0.3 0.628,0.546 0.319,0.774 0.038,0.752 -0.112,0.74 -0.474,0.424 -0.406,0.408 -0.429,0.414 -0.429,0.362 -0.44,0.339 c 0.068,0.043 0.154,0 0.185,-0.073 0.022,-0.052 0.044,-0.107 0.087,-0.15 C -0.117,0.067 -0.028,0.055 0,0" /></g><g
transform="translate(23.4055,8.5282)"
id="g160"><path
id="path162"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.176,0.215 0.322,0.101 0.398,0.099 0.583,0.092 0.57,-0.166 0.551,-0.331 1.27,0.017 1.955,0.514 2.8,0.332 2.309,0.846 2.483,1.95 3.178,2.087 3.18,2.087 2.729,2.16 2.683,2.19 2.078,2.574 1.338,2.939 0.933,2.136 0.73,1.737 1.102,1.414 1.379,1.085 1.429,1.026 1.348,0.989 1.284,0.972 0.622,0.803 -0.596,0.704 -0.65,1.693 -0.656,1.792 -0.911,1.874 -1.076,1.87 -1.566,1.855 -1.558,1.232 -1.502,1.274 -1.396,1.356 -1.068,1.326 -1.108,1.076 -1.144,0.844 -1.6,1.2 -1.782,0.964 -1.935,0.77 -1.93,0.447 -1.822,0.231 c -0.021,0.079 0.071,0.137 0.12,0.145 0.507,0.085 0.537,-0.092 0.386,-0.582 -0.011,-0.038 0.15,-0.349 0.257,-0.377 -0.009,0.003 -0.007,0.071 0.008,0.094 0.014,0.025 0.039,0.042 0.065,0.051 0.054,0.017 0.111,0.015 0.167,0.03 0.026,0.008 0.046,0.025 0.072,0.039 0.039,0.025 0.066,0.062 0.095,0.097 0.118,0.149 0.222,0.339 0.421,0.358 0.091,0.008 0.15,-0.032 0.229,-0.083" /></g><g
transform="translate(28.6573,6.2339)"
id="g164"><path
id="path166"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.463,0.461 0.799,1.075 1.295,1.525 0.752,1.846 0.077,2.18 0.005,2.899 0,2.947 0.081,3.001 0.099,2.992 0.856,2.568 1.876,2.534 2.422,3.307 2.861,3.932 3.053,4.945 3.911,5.004 3.625,5.552 3.947,6.185 4.416,6.475 4.257,6.534 4.054,6.665 3.875,6.631 3.66,6.595 3.566,6.301 3.319,6.256 3.708,7.566 2.957,9.395 1.514,9.362 1.244,9.356 0.893,9.14 0.804,8.844 0.722,8.565 0.679,8.214 0.88,7.975 1.352,7.409 1.693,6.793 1.544,6.047 1.88,6.336 2.191,6.764 2.18,7.221 2.178,7.334 2.384,7.252 2.416,7.3 2.81,7.878 2.166,8.235 1.824,8.6 1.729,8.697 1.969,8.85 2.001,8.839 3.237,8.469 3.354,6.946 2.824,5.955 2.683,6.132 2.16,6.073 1.983,6.134 2.561,5.841 2.411,5.801 2.387,5.704 2.344,5.53 1.824,5.606 1.724,5.477 1.55,5.256 1.419,5.158 1.406,4.421 1.646,4.68 1.96,5.073 2.301,4.898 3.029,4.524 2.265,3.265 1.578,3.057 0.991,2.88 0.449,3.066 0.086,3.577 -0.44,4.316 -0.059,5.21 -0.432,5.961 -0.742,5.883 -0.672,5.477 -0.833,5.55 -1.406,5.815 -1.731,6.427 -2.145,6.939 -2.316,6.878 -2.392,6.718 -2.558,6.726 -2.803,6.737 -3.265,6.812 -3.364,6.689 -3.478,6.546 -3.561,5.507 -2.55,5.13 -1.864,4.874 -1.32,4.646 -0.888,4.11 -1.178,4.088 -1.279,4.227 -1.516,4.236 -1.749,4.244 -1.896,4.154 -2.072,4.064 -2.24,3.977 -2.438,3.646 -2.404,3.383 -2.247,2.125 -0.769,2.108 -0.089,1.311 0.028,1.177 -0.267,0.63 -0.545,0.409 -0.782,0.219 -1.351,0.694 -1.258,1.096 -1.184,1.416 -1.959,1.632 -2.231,1.264 -2.123,1.277 -2.096,1.206 -2.106,1.156 -2.154,0.858 -1.786,0.847 -1.798,0.697 -1.816,0.489 -1.995,0.784 -2.136,0.811 -2.45,0.873 -2.76,0.764 -2.944,0.513 -2.999,0.439 -3.122,0.317 -3.068,0.189 c 0.24,0.115 0.364,-0.257 0.588,-0.141 0.134,0.068 0.246,0.189 0.409,0.147 0.065,-0.017 0.133,-0.105 0.074,-0.143 -0.436,-0.28 -0.785,-0.672 -0.469,-1.118 0.008,0.104 0.09,0.177 0.157,0.196 0.127,0.036 0.295,-0.052 0.419,-0.011 0.203,0.07 0.098,0.269 0.176,0.415 0.121,0.227 0.533,0.602 0.764,0.328 0.043,-0.049 0.009,-0.233 -0.115,-0.234 0.128,0.001 0.242,-0.124 0.351,-0.1 0.03,0.006 0.063,0.006 0.091,0.02 0.024,0.011 0.053,0.017 0.071,0.037 0.051,0.052 0.11,0.105 0.118,0.187 0.094,-0.008 0.212,-0.017 0.273,0.063 0.06,0.079 0.134,0.142 0.198,0.202" /></g><g
transform="translate(26.5492,15.3331)"
id="g168"><path
id="path170"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.81,0.228 1.71,0.647 1.905,1.548 2.15,1.4 2.227,1.064 2.23,0.859 2.249,-0.269 1.755,-1.244 1.995,-2.427 2.02,-2.559 2.265,-2.979 2.154,-2.929 2.019,-2.869 1.735,-2.601 1.577,-2.725 1.381,-2.88 1.394,-3.121 1.3,-3.066 0.944,-2.848 0.567,-2.529 0.393,-2.116 0.327,-1.959 0.355,-1.625 0.311,-1.673 0.04,-1.968 -0.514,-2.031 -0.924,-2.094 c 0.094,0.084 0.178,0.42 0.162,0.49 -0.322,0.162 -0.787,-0.391 -0.778,-0.32 0.017,0.178 0.036,0.234 0.053,0.282 C -1.246,-0.935 -0.793,-0.219 0,0" /></g><g
transform="translate(19.9531,34.1083)"
id="g172"><path
id="path174"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.034,0.015 0.052,0.039 0.048,0.043 -0.247,0.455 -0.601,0.415 -0.749,0.047 -0.852,-0.2 -0.26,-0.121 0,0 M 0.575,0.438 C 0.785,0.444 0.94,0.574 1.073,0.715 1.063,0.597 1.236,0.43 1.172,0.303 1.091,0.145 0.889,0.051 0.85,-0.097 0.767,-0.398 1.009,-0.692 0.832,-0.991 0.312,-1.87 -0.824,-1.579 -1.6,-1.774 c 0.053,0.095 -0.013,0.236 -0.071,0.275 0.344,-0.045 0.801,0.031 0.894,0.291 0.114,0.321 0.17,0.558 0.019,0.823 -0.248,0.437 -0.764,0.232 -1.153,0.081 -0.06,0.27 0.194,0.434 0.34,0.472 0.411,0.108 0.783,0.286 1.166,0.429 0.334,0.125 0.638,-0.167 0.98,-0.159" /></g><g
transform="translate(35.002,34.2648)"
id="g176"><path
id="path178"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.032,0.019 -0.026,-0.025 0.001,0.003 -0.321,0.163 -0.737,0.374 -0.885,-0.055 -0.992,-0.369 -0.278,-0.15 0,0 M 0.514,-1.377 C 0.403,-1.474 0.218,-1.471 0.092,-1.557 0.015,-1.61 -0.054,-1.667 -0.134,-1.714 c -0.037,-0.024 -0.148,-0.073 -0.189,-0.083 -0.113,-0.03 -0.089,-0.017 -0.193,-0.03 -0.063,-0.009 -0.092,-0.011 -0.155,-0.011 -0.061,0 -0.253,-0.006 -0.314,-0.005 -0.148,0.003 -0.173,-0.006 -0.321,0.016 -0.085,0.013 -0.167,0.037 -0.246,0.064 -0.054,0.017 -0.111,0.028 -0.168,0.029 0.006,0.059 0.014,0.124 0.06,0.162 0.062,0.054 0.074,0.006 0.164,0.014 0.004,0 0.127,-0.01 0.132,-0.01 0.021,0 0.046,0.001 0.067,0.004 0.04,0.006 0.072,0.013 0.106,0.031 0.045,0.021 0.093,0.033 0.133,0.065 0.014,0.012 0.03,0.024 0.044,0.038 0.03,0.027 0.07,0.042 0.096,0.076 0.085,0.102 0.148,0.202 0.157,0.334 0.008,0.099 0.016,0.2 -0.002,0.3 -0.003,0.016 -0.006,0.032 -0.007,0.047 -0.006,0.077 -0.044,0.151 -0.082,0.223 -0.225,0.429 -0.765,0.009 -1.136,0.028 0,0.082 -0.007,0.233 0.034,0.286 0.265,0.341 0.672,0.173 0.884,0.33 0.713,0.527 0.902,0.147 1.646,-0.059 C 0.799,0.073 1.12,0.213 1.331,0.303 1.383,0.326 1.382,-0.01 1.355,-0.079 1.266,-0.315 1.023,-0.302 0.937,-0.515 0.812,-0.824 0.792,-1.261 0.464,-1.418" /></g><g
transform="translate(26.5934,17.0555)"
id="g180"><path
id="path182"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0.127,-0.047 0.505,0.161 0.641,0.238 0.675,0.257 0.698,0.289 0.724,0.316 0.726,0.319 0.722,0.327 0.716,0.328 0.608,0.351 0.51,0.359 0.405,0.37 0.325,0.38 0.265,0.434 0.186,0.449 0.165,0.454 0.146,0.451 0.124,0.443 0.094,0.431 0.083,0.41 0.059,0.398 0.02,0.38 -0.034,0.38 -0.069,0.348 -0.104,0.317 -0.135,0.286 -0.145,0.241 -0.159,0.189 -0.148,0.111 -0.11,0.067 -0.083,0.03 -0.04,0.014 0,0 M 0.979,0.577 C 1.308,0.499 1.668,0.488 1.881,0.776 1.987,0.33 1.577,0.273 1.501,0.056 1.386,-0.277 1.393,-0.609 1.071,-0.781 0.43,-1.122 -0.371,-1.532 -1.107,-1.592 c 0.006,0.09 -0.056,0.254 0.062,0.261 0.258,0.011 0.458,0.202 0.516,0.355 0.081,0.211 -0.011,0.726 -0.202,0.826 -0.222,0.118 -0.417,-0.062 -0.62,-0.151 -0.085,0.225 0.266,0.599 0.817,0.566 -0.014,0.001 0.273,0.314 0.26,0.304 0.36,0.247 0.754,0.123 1.253,0.008" /></g><g
transform="translate(37.5694,20.7538)"
id="g184"><path
id="path186"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C -0.011,0.109 0.26,0.432 0.267,0.67 0.292,1.477 0.779,1.857 0.793,2.72 0.796,2.944 -0.135,3.156 -0.176,3.64 -0.195,3.881 -0.275,4.229 -0.034,4.223 0.275,4.218 0.579,4.273 0.797,4.466 1.771,5.324 0.949,6.495 0.831,7.531 0.805,7.758 1.225,8.246 1.213,8.407 1.145,9.285 0.982,10.086 1.295,10.948 1.05,10.729 0.976,10.367 0.771,10.182 c -0.1,-0.093 -0.149,0.111 -0.143,0.143 0.125,0.759 0.426,1.422 0.777,2.144 0.416,0.854 0.207,1.549 -0.561,1.804 -0.705,0.235 -1.385,-0.421 -1.462,-1.095 -0.071,-0.619 0.121,-1.36 0.268,-1.865 0.043,-0.149 0.017,-0.318 0.049,-0.448 0.125,0.512 0.14,1.046 0.131,1.588 -0.002,0.131 0.103,0.308 0.239,0.347 0.458,0.133 0.694,-0.199 0.664,-0.456 C 0.632,11.535 0.468,10.914 0.275,10.11 0.054,9.19 0.382,8.279 0.479,7.387 0.126,7.593 -0.256,7.604 -0.392,7.054 -0.466,6.763 -0.202,6.456 -0.122,6.197 -0.114,6.548 0.217,7.028 0.539,6.814 0.935,6.551 0.949,5.291 0.862,5.124 0.67,4.759 0.355,4.498 -0.083,4.629 -0.33,4.7 -0.23,5.066 -0.377,5.22 -1.163,6.032 -1.521,7.004 -1.588,8.125 -1.599,8.29 -1.513,8.721 -1.536,8.731 -2.564,9.154 -3.038,8.732 -3.463,8.125 -3.537,8.309 -3.929,8.566 -3.961,8.509 -4.156,8.147 -4.099,7.49 -3.807,7.236 -3.015,6.551 -2.23,6.092 -1.785,5.112 -2.26,5.05 -2.724,4.913 -2.906,4.415 -3.097,3.897 -3.031,3.175 -2.484,2.965 -2.037,2.793 -1.27,2.986 -1.103,2.964 -0.628,2.902 -0.097,2.492 -0.172,2.044 -0.176,2.021 -0.375,0.974 -0.829,1.234 -1.074,1.374 -0.937,1.949 -1.311,2.038 -1.815,2.161 -1.939,1.457 -1.874,1.517 c 0.16,0.153 0.272,-0.1 0.583,-0.273 -1.056,0.23 -0.727,-0.738 -0.689,-0.631 0.054,0.15 0.245,-0.008 0.624,0.019 0.014,0 -0.082,-0.08 -0.088,-0.088 C -1.503,0.448 -1.532,0.4 -1.575,0.297 -1.596,0.25 -1.594,0.196 -1.587,0.147 c 0.005,-0.053 0.023,-0.098 0.052,-0.143 0.005,-0.01 0.014,-0.018 0.026,-0.024 0.005,-0.001 0.019,-0.026 0.022,-0.026 0.023,-0.002 -0.02,0.074 0.041,0.078 0.015,0.002 0.059,0.008 0.07,0.004 0.029,-0.011 0.065,-0.028 0.095,-0.036 0.026,-0.006 0.055,-0.012 0.084,-0.017 0.073,-0.009 0.099,-0.011 0.161,0.011 0.054,0.018 0.106,0.029 0.157,0.065 -0.068,-0.047 0.075,0.067 0.069,0.055 0.065,0.141 0.106,0.1 0.12,0.125 0.113,0.213 0.21,0.234 0.458,0.204 C -0.208,0.441 -0.163,0.39 -0.148,0.368 -0.13,0.342 -0.079,0.207 -0.088,0.257 -0.071,0.158 -0.009,0.096 0,0" /></g><g
transform="translate(29.9568,30.4717)"
id="g188"><path
id="path190"
style="fill:#cd1543;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C -0.064,0.04 -0.085,0.139 -0.129,0.179 -0.143,0.194 -0.155,0.21 -0.169,0.227 -0.19,0.248 -0.2,0.28 -0.209,0.312 c -0.044,0.149 -0.022,0.327 0.114,0.427 0.006,0.005 0.005,0.014 0.007,0.02 0.007,0.014 0.027,0.021 0.031,0.032 0.004,0.013 0.027,0.013 0.02,0.03 0.009,-0.005 0.01,0.008 0.014,0.012 C 0.003,0.869 0.005,0.932 -0.047,0.948 -0.004,0.945 0.041,0.946 0.084,0.936 0.101,0.933 0.118,0.928 0.136,0.926 0.303,0.904 0.512,0.828 0.556,0.661 L 0.615,0.595 C 0.789,0.191 0.729,-0.802 1.695,-1.04 2.198,-1.164 2.704,-1.32 3.22,-1.312 3.095,-1.815 3.097,-2.452 3.496,-2.816 2.916,-2.5 2.53,-2.566 2.026,-2.09 1.801,-1.876 1.277,-1.586 1.024,-1.628 0.92,-1.647 1.167,-1.294 0.936,-1.224 c -0.153,0.046 -0.56,0.036 -0.629,-0.069 -0.334,-0.502 -0.686,-0.5 -0.804,-0.602 0.136,0.116 -0.547,0.673 0.301,0.975 0.081,0.029 0.111,0.214 0.011,0.26 -0.166,0.076 -0.305,-0.037 -0.468,-0.134 -0.187,-0.111 -0.231,0.297 -0.525,0.147 -0.062,0.872 0.716,0.946 1.178,0.403 0.032,-0.041 0.162,0.008 0.108,0.054" /></g><g
transform="translate(40.4906,34.2664)"
id="g192"><path
id="path194"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -0.119,-5.727 -0.237,-11.233 -1.919,-16.549 l -11.88,9.431 -11.928,-9.458 c -1.693,5.326 -1.809,10.844 -1.928,16.584 -0.011,0.545 -0.023,1.092 -0.036,1.64 l 27.727,0 C 0.023,1.097 0.011,0.548 0,0 m -5.169,-23.437 c -1.95,-2.994 -4.94,-5.498 -8.652,-7.246 -3.717,1.743 -6.712,4.248 -8.666,7.246 -0.327,0.501 -0.631,1.005 -0.917,1.511 l 9.604,7.613 9.561,-7.59 c -0.289,-0.514 -0.598,-1.025 -0.93,-1.534 m -19.98,5.21 11.349,8.997 11.302,-8.973 c -0.285,-0.74 -0.602,-1.477 -0.958,-2.209 l -10.343,8.211 -10.388,-8.236 c -0.357,0.733 -0.676,1.47 -0.962,2.21 m -3.105,20.424 0.007,-0.281 c 0.015,-0.642 0.028,-1.281 0.041,-1.919 0.175,-8.323 0.338,-16.184 5.258,-23.736 2.03,-3.115 5.147,-5.708 9.012,-7.497 l 0.116,-0.055 0.115,0.055 c 3.86,1.795 6.971,4.388 8.997,7.497 4.919,7.549 5.083,15.407 5.257,23.728 0.014,0.64 0.028,1.282 0.043,1.927 l 0.007,0.281" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,11 @@
{% extends "base.html" %}
{% block content %}
<h1>Archives for {{ SITENAME }}</h1>
<dl>
{% for article in dates %}
<dt>{{ article.locale_date }}</dt>
<dd><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a></dd>
{% endfor %}
</dl>
{% endblock %}

View File

@ -0,0 +1,44 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
{% if article.description %}
<meta name="description" content="{{article.description}}" />
{% endif %}
{% for tag in article.tags %}
<meta name="tags" content="{{tag}}" />
{% endfor %}
{% endblock %}
{% block content %}
<section id="content" class="body">
<header>
<h2 class="entry-title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark"
title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></h2>
{% import 'translations.html' as translations with context %}
{{ translations.translations_for(article) }}
</header>
<footer class="post-info">
<time class="published" datetime="{{ article.date.isoformat() }}">
{{ article.locale_date }}
</time>
{% if article.modified %}
<time class="modified" datetime="{{ article.modified.isoformat() }}">
{{ article.locale_modified }}
</time>
{% endif %}
{% if article.authors %}
<address class="vcard author">
By {% for author in article.authors %}
<a class="url fn" href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a>
{% endfor %}
</address>
{% endif %}
</footer><!-- /.post-info -->
<div class="entry-content">
{{ article.content }}
</div><!-- /.entry-content -->
</section>
{% endblock %}

View File

@ -0,0 +1,7 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - Articles by {{ author }}{% endblock %}
{% block content_title %}
<h2>Articles by {{ author }}</h2>
{% endblock %}

View File

@ -0,0 +1,13 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME }} - Authors{% endblock %}
{% block content %}
<h1>Authors on {{ SITENAME }}</h1>
<ul>
{%- for author, articles in authors|sort %}
<li><a href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a> ({{ articles|count }})</li>
{% endfor %}
</ul>
{% endblock %}

View File

@ -0,0 +1,78 @@
<!DOCTYPE html>
<html lang="{{ DEFAULT_LANG }}">
<head>
{% block head %}
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}{{ SITENAME }}{% endblock title %} | {{ SITENAME }}</title>
<link rel="stylesheet" href="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/css/{{ CSS_FILE }}" />
{% if FEED_ALL_ATOM %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Full Atom Feed" />
{% endif %}
{% if FEED_ALL_RSS %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Full RSS Feed" />
{% endif %}
{% if FEED_ATOM %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Atom Feed" />
{% endif %}
{% if FEED_RSS %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
{% endif %}
{% if CATEGORY_FEED_ATOM and category %}
<link href="{{ FEED_DOMAIN }}/{{ CATEGORY_FEED_ATOM|format(category.slug) }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Categories Atom Feed" />
{% endif %}
{% if CATEGORY_FEED_RSS and category %}
<link href="{{ FEED_DOMAIN }}/{{ CATEGORY_FEED_RSS|format(category.slug) }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Categories RSS Feed" />
{% endif %}
{% if TAG_FEED_ATOM and tag %}
<link href="{{ FEED_DOMAIN }}/{{ TAG_FEED_ATOM|format(tag.slug) }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Tags Atom Feed" />
{% endif %}
{% if TAG_FEED_RSS and tag %}
<link href="{{ FEED_DOMAIN }}/{{ TAG_FEED_RSS|format(tag.slug) }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Tags RSS Feed" />
{% endif %}
{% endblock head %}
</head>
<body>
<header>
<a href="https://csclub.uwaterloo.ca">
<img class="csc_logo" src="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/images/csc_logo.svg" alt="Computer Science Club" />
</a>
</header>
<nav>
<ul>
{% for title, link in MENUITEMS %}
<li><a href="{{ link }}">{{ title }}</a></li>
{% endfor %}
{% if DISPLAY_PAGES_ON_MENU %}
{% for p in pages %}
<li{% if p == page %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a></li>
{% endfor %}
{% else %}
{% if DISPLAY_CATEGORIES_ON_MENU %}
{% for cat, null in categories %}
<li{% if cat == category %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ cat.url }}">{{ cat }}</a></li>
{% endfor %}
{% endif %}
{% endif %}
</ul>
</nav>
<div class="content-wrapper">
{% block content %}
{% endblock %}
</div>
<footer>
<div class="content">
<a href="https://uwaterloo.ca">
<img class="uw_logo" src="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/images/uw_logo.svg" alt="University of Waterloo" />
</a>
<p>Copyright &copy; 2017-2018 &mdash; <a href="https://csclub.uwaterloo.ca">University of Waterloo Computer Science Club</a></p>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,8 @@
{% extends "base.html" %}
{% block content %}
<ul>
{% for category, articles in categories %}
<li><a href="{{ SITEURL }}/{{ category.url }}">{{ category }}</a></li>
{% endfor %}
</ul>
{% endblock %}

View File

@ -0,0 +1,5 @@
{% extends "index.html" %}
{% block content_title %}
<h2>Articles in the {{ category }} category</h2>
{% endblock %}

View File

@ -0,0 +1,14 @@
{% if GOSQUARED_SITENAME %}
<script type="text/javascript">
var GoSquared={};
GoSquared.acct = "{{ GOSQUARED_SITENAME }}";
(function(w){
function gs(){
w._gstc_lt=+(new Date); var d=document;
var g = d.createElement("script"); g.type = "text/javascript"; g.async = true; g.src = "https://d1l6p2sc9645hc.cloudfront.net/tracker.js";
var s = d.getElementsByTagName("script")[0]; s.parentNode.insertBefore(g, s);
}
w.addEventListener?w.addEventListener("load",gs,false):w.attachEvent("onload",gs);
})(window);
</script>
{% endif %}

View File

@ -0,0 +1,28 @@
{% extends "base.html" %}
{% block content %}
<section id="content">
{% block content_title %}
<h2>All articles</h2>
{% endblock %}
<ol id="post-list">
{% for article in articles_page.object_list %}
<li><article class="hentry">
<header> <h2 class="entry-title"><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></h2> </header>
<footer class="post-info">
<time class="published" datetime="{{ article.date.isoformat() }}"> {{ article.locale_date }} </time>
<address class="vcard author">By
{% for author in article.authors %}
<a class="url fn" href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a>
{% endfor %}
</address>
</footer><!-- /.post-info -->
<div class="entry-content"> {{ article.summary }} </div><!-- /.entry-content -->
</article></li>
{% endfor %}
</ol><!-- /#posts-list -->
{% if articles_page.has_other_pages() %}
{% include 'pagination.html' %}
{% endif %}
</section><!-- /#content -->
{% endblock content %}

View File

@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block title %}{{ page.title }}{%endblock%}
{% block content %}
<h1>{{ page.title }}</h1>
{% import 'translations.html' as translations with context %}
{{ translations.translations_for(page) }}
{{ page.content }}
{% if page.modified %}
<p>
Last updated: {{ page.locale_modified }}
</p>
{% endif %}
{% endblock %}

View File

@ -0,0 +1,11 @@
{% if DEFAULT_PAGINATION %}
<p class="paginator">
{% if articles_page.has_previous() %}
<a href="{{ SITEURL }}/{{ articles_previous_page.url }}">&laquo;</a>
{% endif %}
Page {{ articles_page.number }} / {{ articles_paginator.num_pages }}
{% if articles_page.has_next() %}
<a href="{{ SITEURL }}/{{ articles_next_page.url }}">&raquo;</a>
{% endif %}
</p>
{% endif %}

View File

@ -0,0 +1,11 @@
{% extends "base.html" %}
{% block content %}
<h1>Archives for {{ period | reverse | join(' ') }}</h1>
<dl>
{% for article in dates %}
<dt>{{ article.locale_date }}</dt>
<dd><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a></dd>
{% endfor %}
</dl>
{% endblock %}

View File

View File

@ -0,0 +1,10 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME }} - Tags{% endblock %}
{% block content %}
<h1>Tags for {{ SITENAME }}</h1>
{%- for tag, articles in tags|sort %}
<li><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a> ({{ articles|count }})</li>
{% endfor %}
{% endblock %}

View File

@ -0,0 +1,9 @@
{% macro translations_for(article) %}
{% if article.translations %}
Translations:
{% for translation in article.translations %}
<a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang }}</a>
{% endfor %}
{% endif %}
{% endmacro %}