Compare commits

..

No commits in common. "main" and "flying-blog" have entirely different histories.

152 changed files with 1662 additions and 2585 deletions

View File

@ -1 +0,0 @@
3.10

View File

@ -17,7 +17,7 @@ newPythonProgressBar [deadlink]
To use this progressbar, it is very easy. To use this progressbar, it is very easy.
.. code-block:: python .. code:: python
# To Setup # To Setup
from progress_bar import ProgressBar from progress_bar import ProgressBar

View File

@ -21,12 +21,12 @@ This would be a little cleaner.
this example would allow for http, https, ssh, spdy and mailto, anything else would error out. this example would allow for http, https, ssh, spdy and mailto, anything else would error out.
.. code-block:: python .. code:: python
facebook_page = URLField(default_protocol="http", protocols=["https","ssh","spdy","mailto"]) facebook_page = URLField(default_protocol="http", protocols=["https","ssh","spdy","mailto"])
The way I could improve this would be The way I could improve this would be
.. code-block:: python .. code:: python
facebook_page = URLField(protocols=["https","https","ssh","spdy","mailto"]) facebook_page = URLField(protocols=["https","https","ssh","spdy","mailto"])

View File

@ -13,14 +13,14 @@ This key had a sub key as well, so figuring out this was tricky.
To start, you can list your gpg keys like so: To start, you can list your gpg keys like so:
.. code-block:: console .. code:: console
$ gpg --list-keys $ gpg --list-keys
This will list keys such as This will list keys such as
.. code-block:: console .. code:: console
pub 4096R/01A53981 2011-11-09 [expires: 2016-11-07] pub 4096R/01A53981 2011-11-09 [expires: 2016-11-07]
uid Tyrel Anthony Souza (Five year key for email.) uid Tyrel Anthony Souza (Five year key for email.)
@ -28,7 +28,7 @@ This will list keys such as
To make this not expire, (same steps to change expiration date to another time), you must first edit the key To make this not expire, (same steps to change expiration date to another time), you must first edit the key
.. code-block:: console .. code:: console
$ gpg --edit-key 01A53981 $ gpg --edit-key 01A53981
@ -38,7 +38,7 @@ You will then see a gpg prompt ``gpg>``
Type "expire" in and you will be prompted for how long to change it to Type "expire" in and you will be prompted for how long to change it to
.. code-block:: console .. code:: console
Changing expiration time for the primary key. Changing expiration time for the primary key.
Please specify how long the key should be valid. Please specify how long the key should be valid.

View File

@ -14,7 +14,7 @@ I recently found a cool command in BASH that I hadn't previously known. ``C-o``
For example: For example:
.. code-block:: console .. code:: console
$ touch a $ touch a
$ touch b $ touch b

View File

@ -10,7 +10,7 @@ CFEngine3 Install on CentOS 5.7
| Today I was tasked with installing CFEngine3 on CentOS-5.7 (A little outdated). When installing CFEngine-3.3.1 I kept getting an error that I couldn't find libtokyocabinet.so.9. I had to set my prefix to /usr/ because the location that tokyocabinet was installing my libraries to was not being read by CFEngine's make script. | Today I was tasked with installing CFEngine3 on CentOS-5.7 (A little outdated). When installing CFEngine-3.3.1 I kept getting an error that I couldn't find libtokyocabinet.so.9. I had to set my prefix to /usr/ because the location that tokyocabinet was installing my libraries to was not being read by CFEngine's make script.
| To do this (I am using tokyocabinet 1.4.47) | To do this (I am using tokyocabinet 1.4.47)
.. code-block:: console .. code:: console
wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz
tar -xzvf tokyocabinet-1.4.47.tar.gz tar -xzvf tokyocabinet-1.4.47.tar.gz
@ -23,7 +23,7 @@ Then I was able to ./configure && make && make install cfengine3 without any pro
So my overall script looked something like this: So my overall script looked something like this:
.. code-block:: console .. code:: console
wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz
tar -xzvf tokyocabinet-1.4.47.tar.gz tar -xzvf tokyocabinet-1.4.47.tar.gz
@ -32,7 +32,7 @@ So my overall script looked something like this:
make make
sudo make install sudo make install
.. code-block:: console .. code:: console
wget http://cfengine.com/source-code/download?file=cfengine-3.3.1.tar.gz wget http://cfengine.com/source-code/download?file=cfengine-3.3.1.tar.gz
tar -xzvf cfengine-3.3.1.tar.gz tar -xzvf cfengine-3.3.1.tar.gz

View File

@ -35,7 +35,7 @@ If you notice I mentioned a current environment in my previous ``pip freeze`` ex
Let's show an example of the first time use of ``virtualenv``: Let's show an example of the first time use of ``virtualenv``:
.. code-block:: console .. code:: console
$ sudo pip install virtualenv # Only time you might need sudo, try without first. $ sudo pip install virtualenv # Only time you might need sudo, try without first.
$ virtualenv myenv # Create the virtual environment $ virtualenv myenv # Create the virtual environment
@ -51,7 +51,7 @@ After you create a virtual environment, you just run``source bin/activate`` and
Once installed correctly, you can run the command ``mkvirtualenv envname`` to create a virtual environment. You can then run``workon envname`` from anywhere, and it will activate that environment. For example, you could be at``/var/www/vhosts/www.mysite.com/django/`` and run``workon envname`` and it would activate the environment from there. This isn't a required package (none of them are really…) as I went a couple years without using``virtualenvwrapper``, but it is very useful and now I use it every day. Some tips I use with my setup of``virtualenvwrapper`` is that I use the postactivate scripts to automatically try to change into the proper project directory of my environment. This also means I usually name my``virtualenv`` after my project name for easy memory. It makes no sense to have a project called "cash_register" but the``virtualenv`` be called "fez". This is how I change to the right project after activating my ``virtualenv``. This goes in ``$WORKON_HOME/postactivate`` Once installed correctly, you can run the command ``mkvirtualenv envname`` to create a virtual environment. You can then run``workon envname`` from anywhere, and it will activate that environment. For example, you could be at``/var/www/vhosts/www.mysite.com/django/`` and run``workon envname`` and it would activate the environment from there. This isn't a required package (none of them are really…) as I went a couple years without using``virtualenvwrapper``, but it is very useful and now I use it every day. Some tips I use with my setup of``virtualenvwrapper`` is that I use the postactivate scripts to automatically try to change into the proper project directory of my environment. This also means I usually name my``virtualenv`` after my project name for easy memory. It makes no sense to have a project called "cash_register" but the``virtualenv`` be called "fez". This is how I change to the right project after activating my ``virtualenv``. This goes in ``$WORKON_HOME/postactivate``
.. code-block:: bash .. code:: bash
#!/bin/bash #!/bin/bash
# This hook is run after every virtualenv is activated. # This hook is run after every virtualenv is activated.

View File

@ -15,7 +15,7 @@ The solution, after a day and a half of research is to override the **formfield_
Our solution is to prefetch for any M2M that are related to the current Model. Our solution is to prefetch for any M2M that are related to the current Model.
.. code-block:: python .. code:: python
def formfield_for_manytomany(self, db_field, request, **kwargs): def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.__class__.__name__ == "ManyToManyField" and \ if db_field.__class__.__name__ == "ManyToManyField" and \

View File

@ -11,7 +11,7 @@ Recently I have been diving into using signals with Django, which of course are
I am working on a website for work which in the most basicexplanation, is a task management site. Recently I have added in the ability to subscribe to tasks and get emails, I did this by connecting to the post_save signal. I only email out when a task is changed, not created (of course, no one would be subscribed to it). This worked flawlessly and "emails" out to anyone who is subscribed. I say that in quotes, because I haven't actually hooked it up to a real SMTP server, and only use I am working on a website for work which in the most basicexplanation, is a task management site. Recently I have added in the ability to subscribe to tasks and get emails, I did this by connecting to the post_save signal. I only email out when a task is changed, not created (of course, no one would be subscribed to it). This worked flawlessly and "emails" out to anyone who is subscribed. I say that in quotes, because I haven't actually hooked it up to a real SMTP server, and only use
.. code-block:: shell .. code:: shell
python -m smtpd -n -c DebuggingServer localhost:1025 python -m smtpd -n -c DebuggingServer localhost:1025
@ -23,7 +23,7 @@ I tried a lot of different things, and was debating some that would be a bit mes
You can do this by doing something like this: You can do this by doing something like this:
.. code-block:: python .. code:: python
from app.models import ModelName from app.models import ModelName

View File

@ -9,7 +9,7 @@ SSH Agent on "boot"
I had a friend complain that he had to keep adding his ssh key to his ssh-agent every time he rebooted. I have a really easy bit of shell code you can put into your .bashrc or your .zshrc file: I had a friend complain that he had to keep adding his ssh key to his ssh-agent every time he rebooted. I have a really easy bit of shell code you can put into your .bashrc or your .zshrc file:
.. code-block:: bash .. code:: bash
SSHKEYFILE=/path/to/your/ssh/key/file SSHKEYFILE=/path/to/your/ssh/key/file
ssh-add -l | grep -q $SSHKEYFILE ssh-add -l | grep -q $SSHKEYFILE

View File

@ -2,7 +2,7 @@ Garage Door Opener
################## ##################
:date: 2022-01-09 22:46 :date: 2022-01-09 22:46
:author: tyrel :author: tyrel
:category: Automation :category: Tech
:tags: home-assistant, home, esp8266, automation, esphome :tags: home-assistant, home, esp8266, automation, esphome
:slug: garage-door-opener :slug: garage-door-opener
:status: published :status: published
@ -56,7 +56,7 @@ I added some markers to figure out what I needed to imitate in ESPHome, and saw
This looks like this in yaml: This looks like this in yaml:
.. code-block:: yaml .. code:: yaml
switch: switch:
- platform: gpio - platform: gpio
@ -78,7 +78,7 @@ I'm pretty sure I jumped and screamed with excitement when it opened!
Once the door was opening and closing, I was able to add more yaml to set another binary sensor to show whether it was open or closed (from the reed sensor): Once the door was opening and closing, I was able to add more yaml to set another binary sensor to show whether it was open or closed (from the reed sensor):
.. code-block:: yaml .. code:: yaml
binary_sensor: binary_sensor:
- platform: gpio - platform: gpio
@ -90,7 +90,7 @@ Once the door was opening and closing, I was able to add more yaml to set anothe
All together this is shown on my Home Assistant Lovelace dashboard using two cards, one that shows a closed door, and one with an open door (both actual pictures of the door!) with a button to open it. Once it opens or closes the other card switches into place, Home Assistant at least at the time didn't have good conditional cards like I wanted. All together this is shown on my Home Assistant Lovelace dashboard using two cards, one that shows a closed door, and one with an open door (both actual pictures of the door!) with a button to open it. Once it opens or closes the other card switches into place, Home Assistant at least at the time didn't have good conditional cards like I wanted.
.. code-block:: yaml .. code:: yaml
type: conditional type: conditional
conditions: conditions:

View File

@ -18,23 +18,31 @@ The tool I've chosen for reading EPUBs is the Python library `ebooklib <https://
My first task was to find an EPUB file, so I downloaded one from my calibre server. I convert all my ebook files to ``.epub`` and ``.mobi`` on my calibre server so I can access them anywhere I can read my OPDS feed. I chose Throne of Glass (abbreviating to ``TOG.epub`` for rest of post). Loading I launched Python, and ran My first task was to find an EPUB file, so I downloaded one from my calibre server. I convert all my ebook files to ``.epub`` and ``.mobi`` on my calibre server so I can access them anywhere I can read my OPDS feed. I chose Throne of Glass (abbreviating to ``TOG.epub`` for rest of post). Loading I launched Python, and ran
.. code-block:: console .. code:: console
>>> from ebooklib import epub >>> from ebooklib import epub
>>> print(book := epub.read_epub("TOG.epub") >>> print(book := epub.read_epub("TOG.epub")
This returned me a ``<ebooklib.epub.EpubBook object...>`` , seeing I had an EpubBook I ran a ``dir(book)`` and found the properties available to me This returned me a ``<ebooklib.epub.EpubBook object...>`` , seeing I had an EpubBook I ran a ``dir(book)`` and found the properties available to me
.. code-block:: python .. code:: python
['add_author', 'add_item', 'add_metadata', 'add_prefix', ['add_author', 'add_item', 'add_metadata', 'add_prefix',
'bindings', 'direction', 'get_item_with_href', 'get_item_with_id', 'bindings',
'get_items', 'get_items_of_media_type', 'get_items_of_type', 'direction',
'get_metadata', 'get_template', 'guide', 'get_item_with_href', 'get_item_with_id', 'get_items',
'items', 'language', 'metadata', 'namespaces', 'pages', 'prefixes', 'get_items_of_media_type', 'get_items_of_type', 'get_metadata',
'reset', 'set_cover', 'set_direction', 'set_identifier', 'set_language', 'get_template', 'guide',
'set_template', 'set_title', 'set_unique_metadata', 'spine', 'items',
'templates', 'title', 'toc', 'uid', 'version'] 'language',
'metadata',
'namespaces',
'pages', 'prefixes',
'reset',
'set_cover', 'set_direction', 'set_identifier', 'set_language', 'set_template', 'set_title', 'set_unique_metadata', 'spine',
'templates', 'title', 'toc',
'uid',
'version']
Of note, the ``get_item_with_X`` entries caught my eye, as well as ``spine``. For my file, ``book.spine`` looks like it gave me a bunch of tuples of ID and a ``"yes"`` string of which I had no Idea what was. I then noticed I had a ``toc`` property, assuming that was a Table of Contents, I printed that out and saw a bunch of ``epub.Link`` objects. This looks like something I could use. Of note, the ``get_item_with_X`` entries caught my eye, as well as ``spine``. For my file, ``book.spine`` looks like it gave me a bunch of tuples of ID and a ``"yes"`` string of which I had no Idea what was. I then noticed I had a ``toc`` property, assuming that was a Table of Contents, I printed that out and saw a bunch of ``epub.Link`` objects. This looks like something I could use.
@ -42,7 +50,7 @@ I will note, at this time I was thinking that this wasn't the direction I wanted
Seeing I was on at least some track, I opened up PyCharm and made a new Project. First I setup a class called Epub, made a couple of functions for setting things up and ended up with Seeing I was on at least some track, I opened up PyCharm and made a new Project. First I setup a class called Epub, made a couple of functions for setting things up and ended up with
.. code-block:: python .. code:: python
class Epub: class Epub:
def __init__(self, book_path: str) -> None: def __init__(self, book_path: str) -> None:
@ -52,7 +60,7 @@ Seeing I was on at least some track, I opened up PyCharm and made a new Project.
I then setup a ``parse_chapters`` file, where I loop through the TOC. Here I went to the definition of ``Link`` and saw I was able to get a ``href`` and a ``title``, I decided my object for chapters would be a dictionary (I'll move to a DataClass later) with ``title`` and ``content``. I remembered from earlier I had a ``get_item_by_href`` so I stored the itext from the TOC's href: ``self.contents.get_item_with_href(link.href).get_content()``. This would later prove to be a bad decision when I opened "The Fold.epub" and realized that a TOC could have a tuple of ``Section`` and ``Link``, not just ``Links``. I ended up storing the item itself, and doing a double loop in the ``parse_chapters`` function to loop if it's a tuple. I then setup a ``parse_chapters`` file, where I loop through the TOC. Here I went to the definition of ``Link`` and saw I was able to get a ``href`` and a ``title``, I decided my object for chapters would be a dictionary (I'll move to a DataClass later) with ``title`` and ``content``. I remembered from earlier I had a ``get_item_by_href`` so I stored the itext from the TOC's href: ``self.contents.get_item_with_href(link.href).get_content()``. This would later prove to be a bad decision when I opened "The Fold.epub" and realized that a TOC could have a tuple of ``Section`` and ``Link``, not just ``Links``. I ended up storing the item itself, and doing a double loop in the ``parse_chapters`` function to loop if it's a tuple.
.. code-block:: python .. code:: python
def parse_chapters(self) -> None: def parse_chapters(self) -> None:
idx = 0 idx = 0
@ -67,7 +75,7 @@ I then setup a ``parse_chapters`` file, where I loop through the TOC. Here I wen
``_parse_link`` simply makes that dictionary of ``title`` and ``item`` I mentioned earlier, with a new ``index`` as I introduced buttons in the DearPyGUI at this time as well. ``_parse_link`` simply makes that dictionary of ``title`` and ``item`` I mentioned earlier, with a new ``index`` as I introduced buttons in the DearPyGUI at this time as well.
.. code-block:: python .. code:: python
def _parse_link(self, idx, link) -> None: def _parse_link(self, idx, link) -> None:
title = link.title title = link.title
@ -81,7 +89,7 @@ That's really all there is to make an MVP of an EPUB parser. You can use ``Beaut
In my implementation my Epub class keeps track of the currently selected chapter, so this loads from all chapters and sets the ``current_text`` variable. In my implementation my Epub class keeps track of the currently selected chapter, so this loads from all chapters and sets the ``current_text`` variable.
.. code-block:: python .. code:: python
def load_view(self) -> None: def load_view(self) -> None:
item = self.chapters[self.current_index]['item'] item = self.chapters[self.current_index]['item']

View File

@ -9,7 +9,7 @@ Scrollbar Colors
Was talking to someone about CSS Nostalgia and "back in my day" when scrollbar colors came up. Was talking to someone about CSS Nostalgia and "back in my day" when scrollbar colors came up.
.. code-block:: css .. code:: css
/* For Chromium based browsers */ /* For Chromium based browsers */
::-webkit-scrollbar { ::-webkit-scrollbar {

View File

@ -17,11 +17,11 @@ My first job out of college was a Python/Django company - and that directed my n
Django, if you are unaware, is a MVC framework that ships with a really great ORM. Django, if you are unaware, is a MVC framework that ships with a really great ORM.
You can do about 95% of your database queries automatically by using the ORM. You can do about 95% of your database queries automatically by using the ORM.
.. code-block:: python .. code:: python
entry, created = Entry.objects.get_or_create(headline="blah blah blah") entry, created = Entry.objects.get_or_create(headline="blah blah blah")
.. code-block:: python .. code:: python
q = Entry.objects.filter(headline__startswith="What") q = Entry.objects.filter(headline__startswith="What")
q = q.filter(pub_date__lte=datetime.date.today()) q = q.filter(pub_date__lte=datetime.date.today())
@ -49,7 +49,7 @@ Full design disclosure: I followed a couple of blog posts in order to develop th
In order to instantiate a model definition, it's pretty easy. In order to instantiate a model definition, it's pretty easy.
What I did is make a new package called ``models`` and inside made a file for my Album. What I did is make a new package called ``models`` and inside made a file for my Album.
.. code-block:: go .. code:: go
type Album struct { type Album struct {
ID string `json:"id" gorm:"primary_key"` ID string `json:"id" gorm:"primary_key"`
@ -67,7 +67,7 @@ Each of the controller functions were bound to a ``gin.Context`` pointer, rather
The ``FindAlbum`` controller was simple: The ``FindAlbum`` controller was simple:
.. code-block:: go .. code:: go
func FindAlbum(c *gin.Context) { func FindAlbum(c *gin.Context) {
var album models.Album var album models.Album
@ -79,7 +79,7 @@ The ``FindAlbum`` controller was simple:
Which will take in a ``/:id`` path parameter, and the GORM part of this is the third line there. Which will take in a ``/:id`` path parameter, and the GORM part of this is the third line there.
.. code-block:: go .. code:: go
models.DB.Where("id = ?", c.Param("id")).First(&album).Error models.DB.Where("id = ?", c.Param("id")).First(&album).Error
@ -90,7 +90,7 @@ Error handling is standard Go logic, ``if err != nil`` etc and then pass that in
This was really easy to set up, and if you want to get a slice back you just use ``DB.Find`` instead, and bind to a slice of those structs. This was really easy to set up, and if you want to get a slice back you just use ``DB.Find`` instead, and bind to a slice of those structs.
.. code-block:: go .. code:: go
var albums []models.Album var albums []models.Album
models.DB.Find(&albums) models.DB.Find(&albums)
@ -109,7 +109,7 @@ I'll only bother describing the ``models`` package here, as thats the SQLX part
In the ``models/album.go`` file, there's your standard struct here, but this time its bound to ``db`` not ``json``, I didn't look too deep yet but I presume that also forces the columns to set the json name. In the ``models/album.go`` file, there's your standard struct here, but this time its bound to ``db`` not ``json``, I didn't look too deep yet but I presume that also forces the columns to set the json name.
.. code-block:: go .. code:: go
type Album struct { type Album struct {
ID int64 `db:"id"` ID int64 `db:"id"`
@ -120,7 +120,7 @@ In the ``models/album.go`` file, there's your standard struct here, but this tim
An interface to make a service, and a receiver are made for applying the ``CreateAlbum`` form (in another package) which sets the form name and json name in it. An interface to make a service, and a receiver are made for applying the ``CreateAlbum`` form (in another package) which sets the form name and json name in it.
.. code-block:: go .. code:: go
func (a *Album) ApplyForm(form *forms.CreateAlbum) { func (a *Album) ApplyForm(form *forms.CreateAlbum) {
a.ID = *form.ID a.ID = *form.ID
@ -135,7 +135,7 @@ Nested inside the ``models/sql/album.go`` file and package, is all of the Receiv
I'll just comment the smallest one, as that gets my point across. I'll just comment the smallest one, as that gets my point across.
Here is where the main part of GORM/SQLX differ - raw SQL shows up. Here is where the main part of GORM/SQLX differ - raw SQL shows up.
.. code-block:: go .. code:: go
func (s *AlbumService) GetAll() (*[]models2.Album, error) { func (s *AlbumService) GetAll() (*[]models2.Album, error) {
q := `SELECT * FROM albums;` q := `SELECT * FROM albums;`

View File

@ -41,7 +41,7 @@ For software, I installed the python packages for Pimoroni and Blinkt, which cam
I then added a new service in systemd to control the mqtt server I then added a new service in systemd to control the mqtt server
.. code-block:: ini .. code:: ini
[Unit] [Unit]
Description=Meeting Indicator Description=Meeting Indicator

View File

@ -2,7 +2,7 @@ Advent of Code 2022 + End of Year Updates
========================================= =========================================
:author: tyrel :author: tyrel
:category: Blog :category: Blog
:tags: python, adventofcode, 6502, assembly, rust, go :tags: python, adventofcode, 6502, assembly
:status: published :status: published
Advent of Code this year is kicking my butt so I haven't been doing any tech blogging really lately. If you want to follow my progress, I think I might be done as of day 15 - This one seems to be a traveling salesman/knapsack problem related. Here's my repo: `https://gitea.tyrel.dev/tyrel/advent-of-code/src/branch/main/2022/python <https://gitea.tyrel.dev/tyrel/advent-of-code/src/branch/main/2022/python>`_. Advent of Code this year is kicking my butt so I haven't been doing any tech blogging really lately. If you want to follow my progress, I think I might be done as of day 15 - This one seems to be a traveling salesman/knapsack problem related. Here's my repo: `https://gitea.tyrel.dev/tyrel/advent-of-code/src/branch/main/2022/python <https://gitea.tyrel.dev/tyrel/advent-of-code/src/branch/main/2022/python>`_.
@ -14,3 +14,5 @@ It's By Gustavo Pezzi at `Pikuma <https://pikuma.com/courses/nes-game-programmin
I've been picking up some more Go work at work. My current team is sort of disbanding so I'm going to be moving away from doing just Python. It's been a year since I've done Go stuff, since I left Tidelift, so I'm really rusty. I've been picking up some more Go work at work. My current team is sort of disbanding so I'm going to be moving away from doing just Python. It's been a year since I've done Go stuff, since I left Tidelift, so I'm really rusty.
Speaking of Rust, I was trying to do Advent of code in Rust also, and made it TWO whole days in Rust. It's still on my bucket of stuff to learn, but my free time seems to be running out lately, and I have a lot of things on my plate to get done. Speaking of Rust, I was trying to do Advent of code in Rust also, and made it TWO whole days in Rust. It's still on my bucket of stuff to learn, but my free time seems to be running out lately, and I have a lot of things on my plate to get done.
Reminder, you can find me on `The Fediverse <https://social.tyrel.dev/tyrel/>`_ as opposed to Twitter these days.

View File

@ -22,6 +22,7 @@ Atlantico is the game that Gustavo is walking us through making in the current p
I loaded it up and HOLY COW - something I actually wrote in Assembly is running on real hardware. I loaded it up and HOLY COW - something I actually wrote in Assembly is running on real hardware.
If you want to watch the video, it's very simplistic at the 75% mark, this was before the Collisions chapter, and no sound yet. If you want to watch the video, it's very simplistic at the 75% mark, this was before the Collisions chapter, and no sound yet.
`I posted about it on my Fediverse server <https://social.tyrel.dev/notice/ARxKt0GNrC0KJwvNsO>`_.
The feeling of getting something running, locally, and seeing it working on screen, despite being a programmer for ~~20 years, is AMAZING. The feeling of getting something running, locally, and seeing it working on screen, despite being a programmer for ~~20 years, is AMAZING.
Writing code that executes on the system you grew up playing the early 90's, wow. Writing code that executes on the system you grew up playing the early 90's, wow.

View File

@ -1,22 +0,0 @@
Emulation
#########
:author: tyrel
:category: Tech
:tags: emulation
:status: published
I haven't had much time lately for blog posts, I've been dealing with bed time routines with my newborn, and once those are done, I get a few hours of alone time for computer things.
Lately I've been toying around with Amiga OS, FreeDOS, Windows 95, and Apple IIe things.
I got a raspberry pi and installed Pimiga, got a fun set up and that was neat. I then installed Amiberry on my macbook, with some remote hard drive images on my samba share, and I have a consistent setup for Amiga on any machine in the house or on tailscale.
I then decided to install FreeDOS to a barely used Dell Vostro 1720 and install to that. It works great, I have WordStar, TurboC, and more installed and it's fun to get back to my roots in that way.
After that I decided to install Windows 95 with 86Box, did the same with remote hard disk images, and got that running. Been toying around in Visual Basic 6, Oh the memories!! I installed that so I could play Lego City, but having voodoo graphics errors I need to figure out before I can play.
I also ordered an Apple IIe emulator machine that runs on an Esp8266 from `CT6502 <https://ct6502.org/product/mfa2-32emu/>`_ and it works great. So cool just tossing a disk image on the MicroSD card and loading it up. The downside to this is I can't figure out how to swap disks in realtime, so I can't play Ultima, or any multi disk games. I can however load .hdv files so if something comes with a hard disk image.
Not really much for a tech post, and nothing to share codewise, but thought I'd break some radio silence. I also imported my flying blog here, so I added the Flying category/tags.

View File

@ -1,30 +0,0 @@
Neovim, Nix, Telescope, Tree-sitter, Mason
##########################################
:author: tyrel
:category: Tech
:tags: nix, nvim, rust
:status: published
I made a mistake with not reading CHANGELOGs for all my packages in Neovim this week. This sent me down a small rabbit hole trying to fix all the things.
What happened is I ran ``:PackerUpdate`` which, pulls the latest version of Packer packages, good, updates! But... Telescope has a new requirement on main branch that requires Neovim 0.9.0. The problem is that the latest NixPkgs for Neovim right now is 0.8.1. I ran to google, tried to set an overlay to use ``neovim-nightly``, but that didn't work. If you recall in `Dotfiles - My 2022 Way <https://tyrel.dev/blog/2023/01/dotfiles-my-2022-way.html>`_ I'm not actually using NixOS so (please correct me if I'm wrong) overlays don't work. I tried specifing a version in my ``programs.nix``, I tried a bunch of other things at 1AM that I don't remember anymore.
Almost ripped it all out just to use Nvim 0.9.0 on this machine until NixPkgs has updated the repo. I decided that was the wrong idea, and went to sleep.
Tonight, I was able to figure out that in Packer, you can pin a commit!
It's clear in the docs, but I was trying to fix it at the Nix level, so I didn't immediately think of this, even though at my last job, Tidelift, I was doing package pinning analysis! Derp.
So, I added ``commit="c1a2af0"`` to my ``use`` statment in ``plugins.lua`` and Telescope started working again without a warning, or issue. `Commit <https://gitea.tyrel.dev/tyrel/dotfiles/commit/eb32c2194aba355afec80e647bb4df31a3e40c73>`_.
That wasn't the only problem though. In my infinite wisdom, I followed some reddit posts that I won't link to, that suggested deleting ``~/.local/share/nvim`` and rerunning ``PackerInstall``, the problem there -- my tree-sitter configs are in my nix files.
This is an issue I need to look at later, but in my `programs.nix <https://gitea.tyrel.dev/tyrel/dotfiles/src/commit/eb32c2194aba355afec80e647bb4df31a3e40c73/hosts/_common/programs.nix#L26-L32>`_ file, I some reason have two entries of ``plugins =``. I had to uncomment the first one where I inject tree-sitter, and comment out the second setting. Then rebuild my nix flakes.
After that,I had to comment the first, uncomment the second, and rebuild with ``withAllGrammars`` config.
This worked, I had my rust tree-sitter configs working, but was missing ``rust-analyzer``.
That's in Mason! So I ran ``:Mason``, found ``rust-analyzer`` slapped that ``i`` button, and I finally had my system back after 2 days of issues.
This was mostly a blogpost so I can reference back to it in the future, but hopefully at least _someone_ learns to pin your dang nvim Packages!

View File

@ -1,35 +0,0 @@
Set Environment Variables with LastPass
#######################################
:author: tyrel
:category: Tech
:tags: bash, automation, work
:status: published
I have to use LastPass at work, and I store some API keys in there. Rather than copy/paste and have the actual api key on my terminal, I like to use ``read -rs ENV_VAR_NAME`` to set environment variables, so they are hidden from scrollback.
Recently my coworker set something up that we need an environment variable set up for running some Terraform commands. I don't feel like pasting it in every time from LastPass, so I figured out how to set this up and automate it. I'm sure I've already talked a lot about how I love ``direnv`` and I maintain a lot of different ``.envrc`` files for work things. For my last team I had one per repo! Well ``direnv`` comes to the rescue again.
* The first step is installing the `lastpass-cli <https://github.com/lastpass/lastpass-cli>`_.
* Then you need to set it up so you log in, how you do that is up to you. I have lpass checking status, and if it exits nonzero, then running lpass login again in my direnv.
* After that you can use ``lpass show`` and capture that in a variable to export your API key as an environment variable.
.. code-block:: bash
lpass status
if [ $? -ne 0 ]; then
lpass login email@address.com
fi
export API_KEY=$(lpass show "Secret-Name-Here" --password)
Example ``.envrc`` file.
I love automating things, and when a coworker says "oh no we have to do this"... I run to automate it!
Resources
~~~~~~~~~
* LastPass CLI https://github.com/lastpass/lastpass-cli
* Direnv https://github.com/direnv/direnv

View File

@ -1,28 +0,0 @@
pfSense
#######
:author: tyrel
:category: Tech
:tags: networking
:status: published
This week I finally got a machine that is solely to run pfSense.
I didn't want to spend _too_ much money so I bought a $200.00 Qotom Firewall Q330G4.
This was great and easy to set up.
First I bought a Netgear WAC104 and installed OpenWRT on it. Simple enough.
Then I put that into bridge mode, so it's just an Access Point and not a "smart" router too.
Then I put my Linksys EA9300 into bridge mode and behind the pfSense machine (into a switch) and couldn't access any of my server's sites.
After futzing with that for a couple days, I finally figured out the problem.
I thought I was behind a double NAT, but I wasn't. When I moved my EA9300 from my sole WiFi router, to behind the pfSense machine, I neglected to change some settings on my AT&T modem.
You see — dear reader— when I set up this network on my AT&T Modem, I had to enable Passthrough mode.
This, was set to a MAC Address, not an IP Address.
So when I was making sure to keep my IP network on the same 192.168.1.1/24, I thought that was all I needed.
Alas, there's a dropdown to pick the MAC address of the machine that everything passes through.
I can now access my bookmarks, notes, ebooks, and plex server!
Thanks to my friend Daniel (@sanitybit) - who was a great rubber duck and gave me some pointers when I was debugging, and also helped me find the hardware for the pfSense box!

View File

@ -1,18 +0,0 @@
Netgear WAC104
##############
:author: tyrel
:category: Tech
:tags: networking
:status: published
I recently bought four Netgear WAC104 devices, and am flashing OpenWRT onto them.
I have struggled a lot to get the firmware on, due to the not great interface they provide.
The issue is, that it prompts you to change the password, but then when you change it on the page you land on, nothing connects anymore and you can't access the router.
The solution is to click "Set Password" in the Administration menu on the left, and set it there.
Even though there is a prompt to set the password on every page, that will change other settings too and break things.
The router isn't great, and the software is awful so thats why I'm installing OpenWRT anyway.
Two down, two more to go!

View File

@ -1,20 +0,0 @@
Laid Off - 2023 Edition!
########################
:author: tyrel
:category: Personal
:tags: work
:status: published
"Hey Tyrel, I put a meeting on your calendar, let me know if you can make it." The last words you want to hear from your manager.
Well it happened again, and I got caught in some layoffs from work and am on the job hunt again. I did want to be able to spend more time with Astrid, but not like this!
After the call with HR and them all explaining what was happening, and panic texting my wife and some friends. I emailed the recruiters I've been working with for a few weeks back, and all day today I've been appling to a lot of places.
There are a LOT of jobs out there I'm not interested in, a lot of Ruby on Rails jobs, crypto companies, etc. But I am finding a LOT of Python or Go jobs I'm applying to. I'd love to get a job doing rust and firmware work, but that's unlikely as I want to stay remote, and I have very minimal Rust experience.
What worries me is finding health insurance, because America ties it to work... my wife is unemployed and now we have to cancel a few appointments for us the next few weeks. Still going to keep Astrids 4mo vaccinations though. Those I'll be okay paying out of pocket for.
I just ended the day applying to twelve jobs, hopefully one pans out!
If anyone needs any Python consultation, let me know too! Thanks!

View File

@ -1,10 +0,0 @@
I am now Matrix Compatible
##########################
:author: tyrel
:category: Tech
:tags: matrix
:status: published
You can now message me on Matrix using `@tyrel:tyrel.dev <https://matrix.to/#/@tyrel:tyrel.dev>`_.
I'm running Synapse.

View File

@ -1,23 +0,0 @@
General Job Search Update
#########################
:author: tyrel
:category: Personal
:tags: work
:status: published
As mentioned in a previous post, I'm on the job hunt again.
I got laid off in June with a 30% Reduction In Force.
I've been searching primarily for Python and Go roles, but I'm not having a lot of luck right now - seems everyone else also got laid off is who I am competing against.
`(That said, go hire my friend Nik! He's fantastic!) <https://nkantar.com/blog/2023/08/hire-me-v202308/>`_
I've had a lot of job opportunity people ghost me.
Gotten through a few late rounds, only to never hear from the company again.
Even if I have emailed them a thank you letter for the interviews, to express my interest.
I've been around professionally for thirteen years.
Over those years, I have picked up mostly back end skills.
I have eight solid years of Django experience.
Four years of Ruby on Rails experience.
A couple years of Flask, FastAPI, and other smaller Python Frameworks mixed in.
I'm looking for an IC role, where I can move into a Tech Lead role. I want to eventually some day be a Staff/Principal role, but I don't have that on paper to show I can do it, so trying to get in somewhere new with an IC role.

View File

@ -1,128 +0,0 @@
My Life Story
#############
:author: tyrel
:category: Personal
:tags: life
:status: published
Trying to write a more prose version of my Resume.
Kind of a living post about my life in the Software Engineering World.
Early Life
----------
I started programming with Visual Basic in the 90s on a laptop in my father's car.
Parents had just divorced and the drive to his new place every other weekend was two hours, so I had a lot of downtime going through the Visual Basic 5 and 6 books we had.
After that, I started trying to program chat bots for Starcraft Battle.net, and irc bots.
In highschool I started taking more Visual Basic courses, mostly because that's all that my teachers had for classes.
Senior year I took some Early Education courses at the local college, and then went to that college (Keene State) for my Computer Science Degree.
At Keene State, I took a lot of Java classes, that was the core curriculum.
I also took some more Visual Basic courses, some C++ and web design courses as well.
After college, I thought I'd be working Java again, but I got a referral from one of my favorite professors to this company called Appropriate Solutions Inc, and started working in Python/Django.
I had never touched Python outside of OpenRPG - and even then it was just installing the interpretor so I could run the game.
Appropriate Solutions Inc
-------------------------
At Appropriate Solutions I worked on maybe ten different projects.
The first thing I worked on was an Hour Tracker to learn how Django works, it worked great, but definitley didn't look too flashy.
From there, I went on to work on a Real Estate Website, a Bus tracking/mapping system for a school district, a Pinterest Clone, and some more GIS mapping things.
One of our projects was with HubSpot, and I went to one of their hackathons, and a couple conferences in Boston.
I had a lot of friends in Boston, so I decided to move there mid 2012.
Propel Marketing
----------------
I got my first Boston job in Quincy, MA - working at a startup called Propel Marketing.
This was also a Python/Django role, but had more front end work.
While there I worked on their internal CMS tooling for selling white labeld websites to clients.
I worked on a lot of internal tooling, one that would pull leads from our system, and then upload to a lot of different vendor tooling.
A couple of Python PIL tools that would generate facebook and twitter banners, but a lot of the work there was learning and writing tests in Python.
Akamai
------
From there, I started a six month contract at Akamai, working for their Tech Marketing team on a couple tools.
This later got extended another three months, until the team ran out of budget for contractors.
I worked on their `"Spinning Globe" <https://gnet.akamai.com/>`_ which was really fun.
Some internal dashboards, and a couple email tools that worked with SalesForce.
Addgene
-------
In 2015 I then landed a spot at Addgene - a nonprofit biotech!
This is where my career really started taking off.
I started to lead projects, do more valuable research and go to conferences.
The company itself was - for my tenure there - two Django Projects and some jQuery/Bootstrap.
The "core" site was the ecommerce and research site.
Buying, selling, research on Plasmids and Viruses.
The back end was the inventory management system.
While there, I also lead the charge on a couple projects.
We were migrating to AWS - from an in house rackmount server, so we needed to get a lot of data on S3.
Testing at Addgene was fickle, as everything was stored in tsv files and reloaded in memory.
I developed a python package that would save thousands of dollars of S3 costs, while still making the file upload process in testing seamless.
`Django DBFileStorage <https://gitlab.com/Tyrel/django-dbfilestorage>`_ was born.
Another charge I lead was helping Celigo alpha test Integrator.IO - working on building an integration of a lot of our sales data into netsuite/salesforce (I forget which one) by working with the Celigo API.
This was a fun project - as when I was done with this, we got to archive an old Java repo that was barely hanging on, and had no bugfixes in years.
While at Addgene, I also started the "Teaching Scientists How To Program" lunch and learn club.
We would have meetings where anyone from the Scientist team could come, ask questions about Python, and work through any of the problems they were having with our Jupyter Notebooks we set up that they could run.
This was great, I helped foster some friendships that I believe will last a lifetime, helped people transition into actual programmers, and helped the company save a lot of time by helping more people learn.
Tidelift
--------
After Addgene, in 2018 I joined an early stage startup called Tidelift.
I was one of the first engineers there, so I got to help lead a lot of early shaping of the company.
I started with working on a lot of the `Lifter <https://tidelift.com/about/lifter>`_ focused side of the site.
Helping create tasks the lifters could complete so they could get paid.
From there working on the Subscriber side of things where the paying clients would get information about their dependencies.
I have an upcoming blog post about some work there, so I won't go into too much details.
I did help start the Tidelift CLI though.
A tool written in Go, it was a CI/CD tool to analyze software dependencies for security/licensing problems
EverQuote
---------
After Tidelift, I started at EverQuote in 2022.
My longtime friend Sam was a Director leading a team that was working on replatforming a monolith and needed to backfill a python role.
I had been asking him for years when he would work on Python stuff, as he had only been working at Ruby companies for the past few years, so this caught my ear and I started there.
The first project was replatforming a Python 2.7 monolith - with code from as far back as 2010 - to micro services.
These were mainly FastAPI services, that communicted amongst eachother with kafka.
Some of them would read from the database, and send events into the kafka stream.
Some would read from the stream, and write to the database.
Others would read from database or kafka, and then communicate with a third party system.
All of these had Grafana (and later NewRelic) metrics attached.
Every server had at least one dashboard, with many graphs, event logs and charts.
These were all deployed using kubernetes, terraform, AWS.
I can't speak to the specifics about past there - as there was another dedicated ops team.
Some other projects I worked on there were really fun.
One of the analysts used to maintain her daily workflow in a google doc, and I helped lead a project that took that apart and worked on it programatically.
This was then turned into a five part rebalancing, reweighting, and email route manipulating script - that ran daily using Cron, and saved that team over fourteen hours a week.
The Remarketing team came to an end, and there was a small re-org and we merged with another team and became the Consumer Engagement team.
This dealt with Calls, SMS, Email, and working with the Sales Reps.
We started a project using Go and React that would pull users from the database and show a script for the Sales rep to read to the client on the phone, with specific information about what plans were available.
Other projects on that team, which is what I spent most of my time on, was porting CI/CD processes from Atlassian Bamboo, to GitHub Actions.
During this time, I took a couple months of paternity leave, and a few weeks after I came back there was a major reduction in force and I was laid off.
After EverQuote
---------------
Since leaving EQ, I have been on the job hunt.
If you know anything about tech in 2023, a LOT of people are job hunting right now.
I'm excited that this happened at a time in my daughter's life where I can spend SO MUCH more time with her than some fathers can.
That's the good side of things.
I hope I get a job soon though, as the sole earner in my family.
If you've made it this far, please check out my Resume in the sidebar, and contact me if you have anything you think would be a fit.
Who knows, I might delete this last section once I get a job!

View File

@ -1,40 +0,0 @@
Which which is which?
#####################
:author: tyrel
:category: Tech
:tags: linux, macos, zsh
:status: published
I had a bit of a "Tyrel you know nothing" moment today with some commandline tooling.
I have been an avid user of ZSH for a decade now, but recently I tried to swap to fish shell.
Along the years, I've maintained a lot of different iterations of `dotfiles <https://gitea.tyrel.dev/tyrel/dotfiles>`_, and shell aliases/functions.
I was talking to a `friend <https://fredeb.dev>`_ [citation needed] about updating from ``exa`` to ``eza`` and then noticed I didn't have my aliases loaded, so I was still using ``ls`` directly, as I have ``alias ls="exa -lhFgxUm --git --time-style long-iso --group-directories-first"`` in my ``.shell_aliases`` file.
I did this by showing the following output:
.. code-block:: shell
$ which ls
/usr/bin/ls
Because I expected it to show me which alias was being pointed to by ``ls``.
My friend pointed out that "Which doesn't show aliases, it only points to files" to which I replied along the lines of "What? No way, I've used ``which`` to show me aliases and functions loads of times."
And promptly sent a screenshot of my system NOT showing that for other aliases I have set up. Things then got conversational and me being confused, to the point of me questioning if "Had I ever successfully done that? Maybe my macbook is set up differrently" and went and grabbed that.
Friend then looked at the man page for which, and noticed that there's the ``--read-alias`` and ``--read-functions`` flags on ``which``, and I didn't have those set.
I then swapped over to bash "Maybe it's a bash thing only? I'm using Fish".
Nope, still nothing! Then went to google, and it turns out that ZSH is what has this setup by default.
Thank you `"Althorion" <https://stackoverflow.com/a/14196212>`_ from Stackoverflow for settling my "Yes you've done this before" confusion.
It turns out that ZSH's ``which`` is equivalent to the ZSH shell built-in ``whence -c`` which shows aliases and functions.
After running ``/usr/bin/zsh`` and sourcing my aliases (I don't have a zshrc file anymore, I need to set that back up), I was able to settle my fears and prove to myself that I wasn't making things up. There is a which which shows you which aliases you have set up, which is default for ZSH.
.. code-block:: shell
$ which ls
ls: aliased to exa -lhFgxUm --git --time-style long-iso --group-directories-first

View File

@ -1,93 +0,0 @@
Rotate a Matrix in Python
#########################
:author: tyrel
:category: Tech
:tags: python
:status: published
I've been doing Advent of Code for a few years now, and every year I do it in my favorite language, Python.
One thing that comes up a lot, is rotating matrices.
One way to do this, is to use Numpy, using ``np.rot90(mat)``, but not everyone wants to install Numpy just to do one small task.
I know I don't always.
The way I always do it, that will support non-square matrixes, is to use zip.
.. code-block:: python
>>> matrix = [
[1,2,3],
[4,5,6],
[7,8,9]
]
>>> rotated = list(zip(*matrix[::-1]))
# And result is
[[7, 4, 1],
[8, 5, 2],
[9, 6, 3]]
We can break this down bit by bit.
This will copy the list, with a -1 step, resulting in a reverse order
.. code-block:: python
>>> matrix[::-1]
[[7,8,9],
[4,5,6],
[1,2,3]]
Next we need to call zip in order to get the x-th item from each inner list, but first, we need to unpack it. If you'll notice, the unpacked version isn't wrapped with another list, which is what zip needs from us.
.. code-block:: python
# Too many lists
>>> print(matrix[::-1])
[[7, 8, 9], [4, 5, 6], [1, 2, 3]]
# Just right
>>> print(*matrix[::-1])
[7, 8, 9] [4, 5, 6] [1, 2, 3]
From there, we can pass this unpacked list of - in our case - three lists, to zip (and in Python 3 this returns a generator, so we need to call list again on it, or just use it)
.. code-block:: python
>>> # Again, we get the rotated matrix
>>> list(zip(*matrix[::-1]))
[[7, 4, 1],
[8, 5, 2],
[9, 6, 3]]
Notes
-----
Small note: If you run this, you will actually get a list of tuples, so you can map those back to a list, if you need to update them for any reason.
I just wanted square brackets in my examples.
.. code-block:: python
# This is just messy looking, so I didn't mention it until now
>>> list(map(list, zip(*matrix[::-1])))
As I mentioned, due to using ``zip`` this will work with non-square examples as well.
.. code-block:: python
>>> matrix = [
... [1,2,3,4,5,6,7,8,9],
... [9,8,7,6,5,4,3,2,1],
... ]
>>> print(list(zip(*matrix[::-1])))
[(9, 1),
(8, 2),
(7, 3),
(6, 4),
(5, 5),
(4, 6),
(3, 7),
(2, 8),
(1, 9)]

View File

@ -1,25 +0,0 @@
Djangocon 2023
##############
:author: tyrel
:category: Tech
:tags: django, conferences
:status: published
I am at DjangoCon 2023 this year!
I live in Durham, NC and have been avoiding conferences for the past few years because of Covid and not wanting to travel.
This year for, what ever reason, they picked Durham!
So I am breaking my "Don't go to conferences" for multiple reasons.
1) The DSF has pretty great Covid rules, and mask requirements.
2) Testing requirements.
3) It's local, so I get to sleep in my own bed.
I'm not guaranteed to get to see my daughter, but I hope she knows I still love her even if I'm not around.
I'm leaving at 7:30 tomorrow as I'm biking in, and she may be asleep.
Already I've gone to one of the local breweries I haven't gone to yet (See above: Covid), and met some great people, can't wait for the rest of the week.
While technically a "Tech Blog" I am by no means a great note taker, so don't expect any quality information from me in blog form, I'm mostly going for the HallwayTrack, and to watch talks.

View File

@ -1,26 +0,0 @@
What I've been up to since October
##################################
:author: tyrel
:category: Personal
:tags: personal
:status: published
Since my last post, about Djangocon I've been pretty MIA. I think I mentioned I got a job, at REDLattice. I've been doing some Django, and other misc programming, and it's been pretty neat. It's a security company, so I haven't really been able to talk about what I've been doing.
It's nice to be back where I'm comfortable, in my tech stack.
I also have been picking up some side projects again, taking some classes, running, and more.
I ran a 5k last month that was on a runway (KGSO) - that was fun. I got sub 30 minutes, but my heart rate spiked REALLY high because it was cold and rainy, not a pleasant race. I really need to work on my running, my average is usually 185, which for a 36yo is awful. I was running slowly for a bit and got it down to a 165 average, but took a week off from runnning because of hurting my foot with a cut.
Gustavo Pezzi released another course on his Pikuma platform - this time it's Playstation 1 programming in C and MIPS. I don't really have the best foundation in C despite doing C++ a lot in college and before - so I've picked up his Graphics Programming from Scratch course. I really enjoy the way he teaches, he never rushes ahead thinking you know something.
One thing I realized is in college I never really did much advanced algebra, so I've decided to also take a Linear Alebra course from MIT's Open Courseware MIT 18.06. Reading math text books is definitely different than I remember, but it might just be this professor. I wish I had some friends doing this course with me, I need to be held accountable.
For other projects I've gotten some new wood tools lately - I traded a watch for them - so I have some ideas in mind now that I have a planer.
Other than that, my daughter turned ONE last month! The day before I turned 36. We had a big party for me, her, and our niece. The party was fun, but I def am not the best party host.
We're taking our first flight as a family next week, hopefully Astrid's not too loud. I was this age when I flew down to Florida and we found out I had hearing issues, so I'm worried for that.
Not much else is new, but felt like it's been time for a blog post recently, even if it's just a personal post.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View File

@ -12,6 +12,7 @@ About Tyrel
Senior Software Engineer with a back end focus. Specializing in Python and Go. Senior Software Engineer with a back end focus. Specializing in Python and Go.
I'm a very infrequent blogger. I will go months without any posts, some time years.
Licenses Licenses
@ -32,5 +33,3 @@ Site notes
~~~~~~~~~~ ~~~~~~~~~~
This blog is proudly powered by `Pelican <https://getpelican.com/>`_, which takes great advantage of Python. This blog is proudly powered by `Pelican <https://getpelican.com/>`_, which takes great advantage of Python.
The Theme is modified from `Blue Penguin Dark <https://github.com/tcarwash/blue-penguin-dark>`_ Theme

View File

@ -4,7 +4,7 @@ Active Projects
:author: tyrel :author: tyrel
:category: Tech :category: Tech
:slug: active-projects :slug: active-projects
:status: draft :status: published
I'm always tooling around on a couple things in the background to keep myself fresh with some programming languiages. I'm always tooling around on a couple things in the background to keep myself fresh with some programming languiages.

View File

@ -6,19 +6,113 @@ Blogroll
:slug: blogroll :slug: blogroll
:status: published :status: published
* Security
* Blogs I Read * `Errata Security <https://blog.erratasec.com/>`_
* `benjojo blog <https://blog.benjojo.co.uk>`_
* `Freedom of the Press Foundation <http://freedom.press/news/>`_
* `Flameeyes Weblog <https://flameeyes.blog>`_
* Friends
* `Ned Batchelder's blog <https://nedbatchelder.com/blog>`_
* `Andrey Petrov <https://shazow.net/>`_ * `Andrey Petrov <https://shazow.net/>`_
* `bitprophet.org on bitprophet.org <https://bitprophet.org/>`_
* `bitquabit <https://www.bitquabit.com/>`_
* `Julia Evans <http://jvns.ca>`_
* `Nik Kantar <https://www.nkantar.com>`_ * `Nik Kantar <https://www.nkantar.com>`_
* `Sam.Codes <https://blog.sam.codes/>`_
* `Steven Leibrock <https://ste5e.site/>`_
* `Stories by Jess Shapiro on Medium <https://medium.com/@transgingerjess?source=rss-44663d5275a4------2>`_ * `Stories by Jess Shapiro on Medium <https://medium.com/@transgingerjess?source=rss-44663d5275a4------2>`_
* `The Industrious Rabbit - Blog <https://theindustriousrabbit.com>`_ * `The Industrious Rabbit - Blog <https://theindustriousrabbit.com>`_
* `The Industrious Rabbit - Videos <https://www.youtube.com/channel/UCV37kgKv2uoFimfxaFKoXOA>`_ * `The Industrious Rabbit - Videos <https://www.youtube.com/channel/UCV37kgKv2uoFimfxaFKoXOA>`_
* `__fredeb.dev <https://fredeb.dev/>`_ * `__fredeb.dev <https://fredeb.dev/>`_
* `hoob.dev <https://hoob.dev/>`_
* Woodworking
* `Making Things Work <https://nrhiller.wordpress.com>`_
* `Anika's DIY Life <https://www.anikasdiylife.com/>`_
* Stuff
* `SectionHiker.com <https://sectionhiker.com/>`_
* Computers
* `Deliberate Software <http://deliberate-software.com/>`_
* `Do I Smell Burning? <https://blog.doismellburning.co.uk/>`_
* `Here Dragons Abound <https://heredragonsabound.blogspot.com/>`_
* `Imapenguin <https://imapenguin.com/>`_
* `ImperialViolet <http://www.imperialviolet.org/>`_
* `Joel on Software <https://www.joelonsoftware.com>`_
* `Julia Evans <http://jvns.ca>`_
* `N O D E <https://N-O-D-E.net>`_
* `Nicole Express <https://nicole.express/>`_
* `Old Vintage Computing Research <https://oldvcr.blogspot.com/>`_
* `Schneier on Security <https://www.schneier.com>`_
* `Stephen Brennan <https://brennan.io>`_
* `The Django weblog <https://www.djangoproject.com/weblog/>`_
* `bitquabit <https://www.bitquabit.com/>`_
* `christophvoigt.com <https://cvo-23052022.fly.dev/>`_
* `journal.stuffwithstuff.com <http://journal.stuffwithstuff.com/>`_
* Writing
* `Helping Writers Become Authors <https://www.helpingwritersbecomeauthors.com/>`_
* `The Write Practice <https://thewritepractice.com/>`_
* Playing
* `Dyson's Dodecahedron <https://dysonlogos.blog>`_
* `Improved Initiative <http://taking10.blogspot.com/>`_
* `ars ludi <https://arsludi.lamemage.com>`_
* Reading
* `Imaginary Worlds <https://www.imaginaryworldspodcast.org/>`_
* `Tor.com Original - Tor.com <https://www.tor.com>`_
* Games
* `Blobs in Games <https://simblob.blogspot.com/>`_
* `Blog | Dungeon Scrawl <https://blog.dungeonscrawl.com/>`_
* `Digital DM <http://www.cryrid.com/digitaldnd>`_
* `The Crooked Staff Blog <https://www.crookedstaff.co.uk/>`_
* Tech Blogs
* `Aphyr: Posts <https://aphyr.com/>`_
* `Chip Huyen <https://huyenchip.com>`_
* `Counting From Zero <http://blogs.whitman.edu/countingfromzero>`_
* `Dan Luu <https://danluu.com/atom/index.xml>`_
* `Eli Bendersky's website <https://eli.thegreenplace.net/>`_
* `Elided Branches <https://www.elidedbranches.com/>`_
* `Embedded in Academia <https://blog.regehr.org>`_
* `Eric Sink <https://ericsink.com/>`_
* `Jessitron <https://jessitron.com>`_
* `Laurence Tratt: Blog <https://tratt.net>`_
* `Marc Brooker's Blog <http://brooker.co.za/blog/>`_
* `Paul Khuong: some Lisp <https://www.pvk.ca/>`_
* `Random ASCII - tech blog of Bruce Dawson <https://randomascii.wordpress.com>`_
* `Scattered Thoughts <https://www.scattered-thoughts.net/>`_
* `The ryg blog <https://fgiesen.wordpress.com>`_
* `Writing - rachelbythebay <http://rachelbythebay.com/w/>`_
* `fabiensanglard.net <https://fabiensanglard.net>`_
* `rakyll.org <https://rakyll.org/>`_
* `tonsky.me <https://tonsky.me/>`_
* Python
* `Hynek Schlawack <https://hynek.me/>`_
* `Ned Batchelder's blog <https://nedbatchelder.com/blog>`_
* `bitprophet.org on bitprophet.org <https://bitprophet.org/>`_
* Literature
* `The Literary Phoenix <https://theliteraryphoenix.com/>`_
* Comics
* `CommitStrip <https://www.commitstrip.com>`_
* `Poorly Drawn Lines <https://poorlydrawnlines.com>`_
* `xkcd.com <https://xkcd.com/>`_
* Tech
* `Irrational Exuberance <https://lethain.com/>`_
* `Cogito, Ergo Sumana <https://www.harihareswara.net/rss/>`_

View File

@ -16,5 +16,5 @@ If you want to use my services, I charge $5 per stamp (The maximum that NC allow
To prepare, first familiarize yourself with `How to get something notarized <https://www.nationalnotary.org/resources-for/public/how-to-prepare-for-notarization>`_. To prepare, first familiarize yourself with `How to get something notarized <https://www.nationalnotary.org/resources-for/public/how-to-prepare-for-notarization>`_.
Then, to request my services, `Email me <mailto:email@tyrel.dev>`_ or `Book Me <https://cal.com/tyrelsouza>`_ Then, to request my services, `Email me <mailto:email@tyrel.dev>`_.

View File

@ -8,40 +8,9 @@ Now
`What is this? <https://nownownow.com/about>`_ `What is this? <https://nownownow.com/about>`_
March 2024
----------
* Astrid is now one, walking, and almost talking. Proud Dad.
October 2023
------------
* I started working at REDLattice, a Cybersecurity company.
June 2023
---------
* I was laid off from EverQuote in a round of layoffs.
April 2023
----------
* Set up FreeDOS on an old Dell Vostro 1720 - so I can now use things like TurboC, WordStar, and play old DOS Games.
* Set up Amiberry with AmigaOS Workbench3.1 on a flash drive, so I can tool around with Amiga finally.
* Ordered a Godot course on Zenva from HumbleBundle. I'm glad to finally peek at it at least, always interested me as a game engine.
* Astrid is two months old now, and not sleeping the best, but growing bigger.
* Making some new parent friends. Helped one new father move. Walked with a couple in our neighborhood about to have a baby and hopefully we stay connected.
* Grandmother is out of the hospital after having two heart stints put in, and giving us a scare with potential fatal surgery.
March 2023 March 2023
~~~~~~~~~~ ~~~~~~~~~~
* Wife had our first child Astrid Mina, on March 2, 2023. On Parental leave until April 26. * Wife had our first child Astrid Mina, on March 2, 2023. On Parental leave until April 26.
* Still working at EverQuote, on a different team now that does Go, React and Ruby. * Still working at EverQuote, on a different team now that does Go, React and Ruby.
* Haven't flown in a while, taking some time off because of some `mental health reasons <https://k3tas.radio/airband/2022/10/24/david-dezendorf/>`_, and now with a kid, no time for a bit. * Haven't flown in a while, taking some time off because of some `mental health reasons <https://k3tas.radio/airband/2022/10/24/david-dezendorf/>`_, and now with a kid, no time for a bit.
What I'm Listening To
---------------------
<a href="https://last.fm/user/tacidsky"><img src="https://lastfm-recently-played.vercel.app/api?user=tacidsky" alt="last.fm recent played"></a>

View File

@ -4,15 +4,11 @@ References
:author: tyrel :author: tyrel
:category: References :category: References
:slug: references :slug: references
:status: draft :status: published
Blog Citations Blog Citations
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
* 2023
* Another citation from my friend Nik. `Self Hosting: Resolved? <https://nkantar.com/blog/2023/04/self-hosting-resolved/>`_
* 2020 * 2020
* My friend Nik has a blog, and I pointed out an alternative so he `Cited Me <https://www.nkantar.com/blog/dict-setdefault-rocks/>`_. * My friend Nik has a blog, and I pointed out an alternative so he `Cited Me <https://www.nkantar.com/blog/dict-setdefault-rocks/>`_.

View File

@ -6,54 +6,34 @@ Resume
:status: published :status: published
`2024 Resume <{attach}/pdfs/Tyrel-Souza-Resume-2024.pdf>`_ Download `2022 Resume <{attach}/pdfs/Tyrel-Souza-Resume-2022.pdf>`_
Also `Online Resume <https://read.cv/tyrel/>`_ for more up to date resume.
This page is accessible by https://cv.tyrel.dev/ also.
---- ----
Resume
======
Senior Software Engineer with focus on Python, Django, Go. Technology enthusiast and IOT tinkerer. Private pilot. Amateur radio operator. Senior Software Engineer with focus on Python, Django, Go. Technology enthusiast and IOT tinkerer. Private pilot. Amateur radio operator.
EXPERIENCE EXPERIENCE
---------- ----------
Mango Voice - Saint George, UT - Senior Software Engineer >>> November 2024 - Present (Remote) EverQuote — Boston, MA — Senior Software Engineer >>> January 2022 -
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
API and Scheduling Team * Ported a Python2.7 monolith to Python3 microservices.
* Automated a daily task for two analysts to be able to be run in only a few moments which saves 18 hours per week of analyst time.
* Python, Django, Django Rest Framework - API development. * Built a UI for manipulating database settings to aid in automating work for analysts.
* just started, will update later! * Migrated a handful of repositories from CircleCI testing to GitHub Actions.
* Ported multiple long running scripts from Python2.7 to Python3.
* Migrated some command line tools from Python2.7 to Python3.
REDLattice - Chantilly, VA — Senior Software Engineer >>> October 2023 -> November 2024 (Remote) * Migrated alerts system platform from PagerDuty to Opsgenie.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Launched a webservice using Go to assist Sales Reps to provide alternative Insurance company matches.
* SOX Compliance training.
Products Team
* Developed a customer portal in Python/Django with multiple supporting microservices.
* Wrote Linux bash/python scripting to automate servers.
* Created and deployed microservices using docker containers.
* Added new GraphQL endpoints to microservices to allow interservice communication.
* Automated selenium workflows with GitLab CI to reduce manual testing time.
* Created an audit logging system to provide users with increased awareness of their systems.
* Created Debian packages for system services, reduces incorrect installation procedures for deployment.
EverQuote — Boston, MA — Senior Software Engineer >>> January 2022 - June 2023 (Remote)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Email Remarketing Team
* Ported a Python2.7 monolith to Python3 microservices using FastAPI, and Kafka.
* Automated a daily task for two analysts to be able to be run in only a few moments which saves 18 hours per week of analyst time.
* Built a UI for manipulating database settings to aid in automating work for analysts.
* Migrated a handful of repositories from CircleCI testing to GitHub Actions.
* Ported multiple long running scripts and command line tools from Python 2.7 to Python 3.
* Migrated alerts system platform from PagerDuty to Opsgenie
* Consumer Engagement Team
* Launched a web service using Go and React (in TypeScript) to assist Sales Reps to provide alternative insurance company matches.
* Transitioned multiple projects from Atlassian Bamboo to GitHub Actions.
Tidelift — Boston, MA — Software Engineer III >>> April 2018 - December 2021 Tidelift — Boston, MA — Software Engineer III >>> April 2018 - December 2021
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -65,17 +45,17 @@ Tidelift — Boston, MA — Software Engineer III >>> April 2018 - December 2021
* Expanded personal project into company product * Expanded personal project into company product
* Tidelift core redesign and pivot * Tidelift core redesign and pivot
* Pivoted from solely a vulnerability scanner to supporting a catalog of open source dependencies
* Pivoted from solely a vulnerability scanner to supporting a catalog of open source dependencies * Part of small team developing Tidelift 2.0/3.0
* Part of small team developing Tidelift 2.0/3.0 * Developed front end Vue, and back end Ruby on Rails
* Developed front end Vue, and back end Ruby on Rails
* Worked on many Sinatra microservices.
* Expanded open source code under https://libraries.io to support more languages. * Expanded open source code under https://libraries.io to support more languages.
* Added new languages manifests support
* Programmed in multiple projects with code all available as open source on github
* Added new languages manifests support
* Programmed in multiple projects with code all available as open source on github
* `Bibliothecary <https://github.com/librariesio/bibliothecary>`_: Added ability to detect dependencies in manifests for Poetry, pip-compile, pipfile, * `Bibliothecary <https://github.com/librariesio/bibliothecary>`_: Added ability to detect dependencies in manifests for Poetry, pip-compile, pipfile,
* Conda
* `Conda Parser <https://github.com/librariesio/conda-parser>`_: Developed ingestor of Conda environment files, parsing environment.yml files * `Conda Parser <https://github.com/librariesio/conda-parser>`_: Developed ingestor of Conda environment files, parsing environment.yml files
* `Conda API <https://github.com/librariesio/conda-api>`_: Programmed web scraping of Anaconda to detect new packages, and REST API endpoints for packages * `Conda API <https://github.com/librariesio/conda-api>`_: Programmed web scraping of Anaconda to detect new packages, and REST API endpoints for packages
@ -83,15 +63,13 @@ Tidelift — Boston, MA — Software Engineer III >>> April 2018 - December 2021
Addgene — Cambridge, MA — Software Engineer >>> March 2015 - March 2018 Addgene — Cambridge, MA — Software Engineer >>> March 2015 - March 2018
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Wrote code to support front end ecommerce site, and back end inventory management system using Django, Django Rest Framework, jQuery, Bootstrap * Wrote Django REST Framework API server behind a token-authenticated NGINX server
* Rewrote file storage backend to keep on Amazon S3 instead of local in-house file system * Rewrote file storage backend to keep on Amazon S3 instead of local in-house file system
* Released my own custom Django module as a result * Released my own custom Django module as a result
* Trained non-developers in Python * Trained non-developers in Python
* Helped start and expand a “non-developer developer” club * Helped start and expand a "non-developer developer" club
* Created mircoservices to support 3rd party API integration
Akamai — Cambridge, MA — Sr. Software Engineer >>> July 2014 - March 2015 Akamai — Cambridge, MA — Sr. Software Engineer >>> July 2014 - March 2015
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -117,7 +95,7 @@ Appropriate Solutions Inc — Peterborough, NH — Software Developer >>> July
SKILLS SKILLS
------ ------
* Python, Go, Django, Flask, Linux, Docker, Git, Mercurial, Postgres, MySQL, MariaDB, Amazon AWS (S3 mostly) Google Cloud Storage, REST APIs, Kafka, Redis, memcached, Sidekiq, RabbitMQ, Eclipse Mosquitto * Python, Go, Django, Flask, Linux, Docker, Git, Mercurial Postgres, MySQL, MariaDB, Amazon AWS (S3 mostly) Google Cloud Storage, REST APIs Kafka, Redis, memcached, Sidekiq, RabbitMQ, Eclipse Mosquitto
EDUCATION EDUCATION
--------- ---------
@ -129,19 +107,6 @@ PERSONAL PROJECTS
* `Django DBFileStorage <https://gitlab.com/Tyrel/django-dbfilestorage>`_ Goal: to continue running CI tests on a remote storage when working on moving file storage to S3 without incurring additional AWS charges. * `Django DBFileStorage <https://gitlab.com/Tyrel/django-dbfilestorage>`_ Goal: to continue running CI tests on a remote storage when working on moving file storage to S3 without incurring additional AWS charges.
CONTRACTING WORK
----------------
Benchtop Devices
~~~~~~~~~~~~~~~~
* Multiple C# Desktop programs, interfacing via serial to get results about pressure tests, calculate decay rates, printing results to pdfs, label machines, and local Sqlite databases. Custom per each client.
* Clients include: Waymo, FlexFlow, Hypertherm
* Python/Django and VueJS tool to convert pressure test results from the Cincinnati Test Blackbelt Machine, to PDFs.
VOLUNTEERING VOLUNTEERING
------------ ------------

View File

@ -1,8 +0,0 @@
#!/usr/bin/env -S just --justfile
pub:
venv/bin/invoke publish
live:
venv/bin/invoke livereload
new:
venv/bin/invoke new-post

View File

@ -5,25 +5,28 @@ AUTHOR = 'Tyrel Souza'
SITENAME = "Tyrel's Blog" SITENAME = "Tyrel's Blog"
TWITTER_USERNAME = 'tyrelsouza' TWITTER_USERNAME = 'tyrelsouza'
SITEURL = '' SITEURL = ''
SITESUBTITLE = 'Code, Flying, Tech, Automation' SITESUBTITLE = 'Code, Tech, Automation'
FAVICON = '/img/icon192.png'
SITEBASE = "/blog" SITEBASE = "/blog"
MENU_INTERNAL_PAGES = [
('Archive', 'archives.html', f'archives.html'),
#('Tags', 'tags.html', f'tags.html'),
#('Categories', 'categories.html', f'categories.html'),
]
MENUITEMS = [ MENUITEMS = [
('My Code', 'https://gitea.tyrel.dev/tyrel'), ('Home', f'{SITEBASE}/'),
('Find Me', 'https://tyrel.dev/links'), ('Tags', f'{SITEBASE}/tags.html'),
('Book Me', 'https://cal.com/tyrelsouza'), ('Categories', f'{SITEBASE}/categories.html'),
('Tags', '/blog/tags.html'),
('Categories', '/blog/categories.html'),
] ]
LINKS = (
('Code', 'https://gitea.tyrel.dev/'),
('Wiki', 'https://tyrel.website/wiki/'),
('Flying Blog', 'https://k3tas.radio/airband/'),
('Photos', 'https://tyrel.website/photos'),
('LinkedIN', 'https://www.linkedin.com/in/tyrel-souza/'),
)
SOCIAL = (
('Twitter', 'https://www.twitter.com/tyrelsouza'),
('Instagram', 'https://www.instagram.com/tyrelsouza'),
('GoodReads', 'https://www.goodreads.com/user/show/24381583-tyrel-souza'),
)
PATH = 'content' PATH = 'content'
@ -40,12 +43,14 @@ AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None AUTHOR_FEED_RSS = None
FEED_ATOM = 'tyrel-dev.atom.xml' FEED_ATOM = 'tyrel-dev.atom.xml'
#FEED_RSS = 'tyrel-dev.rss'
FEED_ALL_ATOM = 'tyrel-dev.all.xml' FEED_ALL_ATOM = 'tyrel-dev.all.xml'
#FEED_ALL_RSS = 'tyrel-dev.all.rss'
PLUGINS = ["webassets"] PLUGINS = ["webassets"]
DEFAULT_PAGINATION = True DEFAULT_PAGINATION = False
DISPLAY_CATEGORIES_ON_MENU = False DISPLAY_CATEGORIES_ON_MENU = False
DELETE_OUTPUT_DIRECTORY = True DELETE_OUTPUT_DIRECTORY = True
@ -67,14 +72,4 @@ DEFAULT_METADATA = {
'extras/favicon.ico': {'path': 'favicon.ico'}, 'extras/favicon.ico': {'path': 'favicon.ico'},
} }
SOCIAL = () THEME = "./themes/solarized"
# THEME = "./themes/pelican-themes/gum"
DISPLAY_PAGES_ON_MENU=True
LANDING_PAGE_ABOUT=True
#THEME = pwd / "themes" / "blue-penguin-dark"
THEME = pwd / "themes" / "solarized"
PAGINATED_TEMPLATES = {'index': 10, 'tag': 10, 'category': 10, 'author': None}
DISPLAY_HOME = False
SUMMARY_MAX_LENGTH = 400

View File

@ -27,4 +27,3 @@ pelican-webassets==2.0.0
libsass==0.21.0 libsass==0.21.0
livereload==2.6.3 livereload==2.6.3
cssmin==0.2.0 cssmin==0.2.0
pelican-syntax-highlighting

View File

@ -1,38 +0,0 @@
name: Create-Screenshot
on:
release:
types: [ created ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
- name: Install pelican
run: |
python -m pip install --upgrade pip
python -m pip install "pelican[markdown]"
- name: Setup Node
uses: actions/setup-node@v3
- run: |
mkdir dist
npm install --global capture-website-cli
pelican sample/content -s sample/settings.py -t .
pelican --listen &
- run: capture-website "http://127.0.0.1:8000" --dark-mode --output "dist/out.png"
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: screenshot
path: dist/out.png
- name: Upload screenshot
uses: genietim/ftp-action@releases/v2
with:
host: ${{ secrets.FTP_SERVER }}
user: ${{ secrets.FTP_USERNAME }}
password: ${{ secrets.FTP_PASSWORD }}
localdir: "dist"
remoteDir: "/"

View File

@ -1,20 +0,0 @@
# Contributors
* [Nevan Scott](https://github.com/nevanscott/Mockingbird) (original author)
* [wrl](https://github.com/wrl/pelican-mockingbird) (port to pelican, pelican-mockingbird)
* [Jody Frankowski](http://github.com/jody-frankowski) (Blue Penguin)
* [Grimbox](https://github.com/Grimbox)
* [ix5](https://github.com/ix5)
* [dn0](https://github.com/dn0)
* [anhtuann](https://github.com/anhtuann)
* [aperep](https://github.com/aperep)
* [iranzo](https://github.com/iranzo)
* [thetlk](https://github.com/thetlk)
* [SnorlaxYum](https://github.com/SnorlaxYum)
* [guikcd](https://github.com/guikcd)
* [jorgesumle](https://github.com/jorgesumle)
* [crxxn](https://github.com/crxxn)
* [gavinzbq](https://github.com/gavinzbq)
* [sylvainmetayer](https://github.com/sylvainmetayer)
* [wbob](https://github.com/wbob)
* [Tyler Carr](https://github.com/tcarwash)

View File

@ -1,24 +0,0 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org>

View File

@ -1,70 +0,0 @@
![screenshot](https://tyler-carr.com/images/ftp/out.png)
# Blue Penguin Dark for pelican
A simple dark theme for pelican, with light/dark mode support using media queries available. Solarized pygments. Feeds support.
This theme has been adapted from the original [Blue Penguin Theme](https://github.com/jody-frankowski/blue-penguin) for use on [my website](https://tyler-carr.com), all changes are generic and this theme can be used interchangeably with the original.
## Settings
```python
# all the following settings are *optional*
# HTML metadata
SITEDESCRIPTION = ''
# all defaults to True.
DISPLAY_HEADER = True
DISPLAY_FOOTER = True
DISPLAY_HOME = True
DISPLAY_MENU = True
DARK_LIGHT_SWITCHING_OFF = True
# provided as examples, they make clean urls. used by MENU_INTERNAL_PAGES.
TAGS_URL = 'tags'
TAGS_SAVE_AS = 'tags/index.html'
AUTHORS_URL = 'authors'
AUTHORS_SAVE_AS = 'authors/index.html'
CATEGORIES_URL = 'categories'
CATEGORIES_SAVE_AS = 'categories/index.html'
ARCHIVES_URL = 'archives'
ARCHIVES_SAVE_AS = 'archives/index.html'
# use those if you want pelican standard pages to appear in your menu
MENU_INTERNAL_PAGES = (
('Tags', TAGS_URL, TAGS_SAVE_AS),
('Authors', AUTHORS_URL, AUTHORS_SAVE_AS),
('Categories', CATEGORIES_URL, CATEGORIES_SAVE_AS),
('Archives', ARCHIVES_URL, ARCHIVES_SAVE_AS),
)
# additional menu items
MENUITEMS = (
('GitHub', 'https://github.com/'),
('Linux Kernel', 'https://www.kernel.org/'),
)
# example pagination pattern
PAGINATION_PATTERNS = (
(1, '{url}', '{save_as}'),
(2, '{base_name}/page/{number}/', '{base_name}/page/{number}/index.html'),
)
```
Dark/Light switching is disabled by default, but can be enabled in the config file by adding:
```
DARK_LIGHT_SWITCHING_OFF = FALSE
```
## How to contribute
Contributions are very welcome. Keep in mind that this theme goal is to be
minimalistic/simple. Contributions will be accepted through Github Pull
Requests. If you dont have a Github account you can suggest me your
changes by email.
## Contributors
See [CONTRIBUTORS.md](CONTRIBUTORS.md).
## License
Public domain.

View File

@ -1,11 +0,0 @@
Title: Solarized Pygments
Date: 2022-6-28 12:00
Category: Python
Tags: pelican, publishing
Authors: Alexis Metaireau, Conan Doyle
Summary: Short version for index and feeds
```
while True:
print("Pelican is neat!")
```

View File

@ -1,8 +0,0 @@
Title: Blue Penguin Dark
Date: 2022-6-28 13:00
Category: Python
Tags: pelican, publishing
Authors: Alexis Metaireau, Conan Doyle
Summary: Short version for index and feeds
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

View File

@ -1,22 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
AUTHOR = 'Tyler Carr'
SITENAME = 'Blue Penguin Dark'
SITEURL = 'http://localhost:8000'
SITELOGO = 'https://www.gravatar.com/avatar/de3ba847c89c8cab9dd7080abebf9df1'
DEFAULT_METADATE = {
'status': 'draft',
}
PATH = 'content'
TIMEZONE = 'America/Los_Angeles'
DEFAULT_LANG = 'en'
MENUITEMS = (
('About', '/'),
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@ -1,481 +0,0 @@
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
/* Mockingbird Theme by Nevan Scott nevanscott.com */
/* Modified by Jody Frankowski */
/* Modified by ix5 */
/* Modified by Tyler Carr */
:root {
--main-bg-color: #1c2833;
--code-bg-color: #17202a;
--accent-color: #C7254E;
--tab-bg-hover: var(--code-bg-color);
--info-bg-color: var(--code-gb-color);
}
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
color: #BBB;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
em {
font-style: italic;
}
strong {
font-weight: bold;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
background-color: var(--main-bg-color);
background: url("/img/flower.png");
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
body {
font-family: Georgia, serif;
font-size: 16px;
line-height: 1.5em;
}
header, #wrapper {
padding: 0 10px;
max-width: 910px;
margin: auto;
clear:both;
}
a {
text-decoration: none;
color: #15A9DB;
}
ul {
list-style: outside disc;
}
ol {
list-style: outside decimal;
}
h1, h2, h3, h4, h5, h6 {
font-family: sans-serif;
font-weight: bold;
}
h1, h2, h3 {
font-size: 1.5em;
line-height: 1em;
margin: 1em 0;
}
.post {
text-indent: 0.5rem;
}
img, p, .post > .highlight, .highlighttable, h4, h5, h6 {
margin-top: 0.6rem;
}
img + em {
font-size: .8em;
}
blockquote {
margin: 1.5em 1.5em 1.5em .75em;
padding-left: .75em;
border-left: 1px solid #EEE;
}
table {
width: 100%;
margin: 1em 0;
}
thead {
border-bottom: 1px solid black;
}
.avatar {
border-radius: 50%;
-mox-border-radius: 50%;
-webkit-border-radius: 50%;
position: relative;
bottom: 0;
top: 0;
margin: auto;
display: inline;
padding-right: 5px;
}
.date {
color: #CCC;
float: left;
clear: both;
width: 130px;
font-size: 1.5em;
line-height: 1em;
margin: 1em 20px 1em 0;
}
.info {
margin-top: 1.3em;
font-family: sans-serif;
text-align: right;
color: #BBB;
}
.info a {
color: inherit;
}
.info a.tags {
background: var(--info-bg-color);
color: #FFF;
display: inline-block;
padding: 0 .3em;
border: 1px transparent solid;
border-radius: 5px;
margin: 0 0 0.3em 0;
}
.info a.tags:hover {
background: inherit;
color: inherit;
}
.info a.tags.selected {
border: 1px #999 solid;
}
.post {
box-shadow: 5px 8px 2px rgba(0, 0, 0, 0.2);
border-radius: 5px;
border: 2px solid rgb(255 190 0 / 10%);
margin: 0 0 4.5em 150px;
backdrop-filter: blur(5px);
padding: 0 1.5em;
}
.post.archives {
margin-bottom: 1.5em;
margin-left: 160px;
}
.post p {
text-align: justify;
}
.page {
margin: 0 90px;
}
.highlight {
border-radius: 3px;
}
.code > .highlight {
border-radius: 0px 3px 3px 0px;
background-color: var(--code-bg-color);
}
.linenos {
border-radius: 3px 0px 0px 3px;
background-color: var(--code-bg-color);
border-right: 1px solid #00232C;
color: #586E75;
text-shadow: 0px -1px #021014;
font-size: 12.6px;
}
td.code {
width: 100%;
max-width: 100px;
}
.linenos a {
color: #586E75;
}
img {
box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.15);
border-radius: 0.3em;
max-width: 100%;
display: block;
margin-left: auto;
margin-right: auto;
}
/*sub and sup stolen from Twitter bootstrap.*/
sub, sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
.post pre, .page pre{
padding: .8em;
font-size: 12.6px;
font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
line-height: 18px;
overflow: auto;
background-color: var(--code-bg-color);
}
.literal {
padding: .5em;
overflow: pre-line;
font-size: 12.6px;
font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
background-color: var(--code-bg-color);
}
form.inline_edit {
clear: both;
margin: 4.5em 0;
background-color: #DDD;
color: #000;
padding: 20px;
border-radius: 5px;
}
.inline_edit .sub {
color: #888;
white-space: nowrap;
}
.inline_edit label {
float: left;
clear: both;
width: 140px;
margin-right: 20px;
}
.inline_edit .buttons {
display: block;
text-align: right;
}
nav ul {
float: right;
list-style: none;
margin: 0 0 0 3em;
padding: 0;
}
nav li {
float: left;
}
nav a {
display: block;
padding: 1.5em 10px 10px 10px;
}
nav a:hover {
background-color: var(--tab-bg-hover);
color: var(--accent-color);
}
nav li.selected a {
background-color: #15A9DB;
color: #FFF;
}
nav li.ephemeral a {
background-color: #15A9DB;
color: #FFF;
filter: brightness(0.75);
}
header .header_box {
padding-top: 1.5em;
text-align: justify;
-moz-text-align-last: justify;
text-align-last: justify;
}
.site_title {
color: #15A9DB;
display: inline-block;
margin:0;
}
.site_subtitle {
display: inline-block;
margin: 0;
}
header h1 {
font-size: 1.5em;
line-height: 1em;
margin: 0;
}
header h2 {
font-size: 1em;
margin: .3em 0;
color: #DDD;
}
#content {
margin-top: 3em;
}
.pages {
font-family: sans-serif;
line-height: 2.5em;
margin: 4.5em 0 3em;
background-color: #2e4053;
border-radius: 5px;
}
.pages a.next_page {
float: right;
width: 140px;
text-align: center;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
background-color: #EEE;
}
.pages a.prev_page {
float: left;
width: 140px;
text-align: center;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
background-color: #EEE;
}
.pages a {
color: inherit;
border: none;
}
.pages a:hover {
background-color: #DDD;
}
.pages span {
display: block;
margin: 0 160px;
text-align: center;
}
code {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
box-sizing: border-box;
background-color: #17202a;
color: #C7254E;
font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
font-size: 12.6px;
line-height: 18px;
padding-bottom: 2px;
padding-left: 0px;
padding-right: 4px;
padding-top: 2px;
}
footer {
font-family: sans-serif;
line-height: 2.5em;
text-align: center;
color: #BBB;
margin: 3em 0;
border: 1px solid #EEE;
border-radius: 5px;
}
footer p { margin: 0; }
.right { float: right; }
.clear { clear: both; }
@media screen and (max-width: 1024px) {
#wrapper {
margin-left: 2.6em;
padding:1em;
}
}
@media screen and (max-width: 800px), print {
#wrapper {
margin: 0;
padding: 1em;
}
.date {
width: 100%;
margin: 0 0 .5em 0;
}
.post {
margin: 0 0 4.5em 0;
}
.post pre,
.post code {
white-space: pre-wrap;
}
.archives {
margin: 0 0 1.5em 0 !important;
}
nav ul {
margin: 0 0 1em 0;
}
}
@media print {
* {
background: #fff;
}
#wrapper, #content {
margin: 0;
padding: 0;
}
header, footer, nav {
display: none;
}
img {
break-inside: avoid;
}
p, table, pre {
widows: 3;
orphans: 3;
}
h1, h2, h3, h4, h5, h6 {
break-after: avoid;
}
h1, h2 {
font-size: 14pt;
}
h3, h4, h4.date {
font-size: 12pt;
}
.post p, .post ul li, .post ol li, .post table {
font-size: 11pt;
}
}
@page {
margin: 1.5cm;
}

View File

@ -1,87 +0,0 @@
/* Solarized Dark
For use with Jekyll and Pygments
http://ethanschoonover.com/solarized
SOLARIZED HEX ROLE
--------- -------- ------------------------------------------
base03 #002b36 background
base01 #586e75 comments / secondary content
base1 #93a1a1 body text / default code / primary content
orange #cb4b16 constants
red #dc322f regex, special keywords
blue #268bd2 reserved keywords
cyan #2aa198 strings, numbers
green #859900 operators, other keywords
*/
.highlight { color: #93a1a1; background-color: #17202a;}
.highlight .c { color: #586e75 } /* Comment */
.highlight .err { color: #93a1a1 } /* Error */
.highlight .g { color: #93a1a1 } /* Generic */
.highlight .k { color: #859900 } /* Keyword */
.highlight .l { color: #93a1a1 } /* Literal */
.highlight .n { color: #93a1a1 } /* Name */
.highlight .o { color: #859900 } /* Operator */
.highlight .x { color: #cb4b16 } /* Other */
.highlight .p { color: #93a1a1 } /* Punctuation */
.highlight .cm { color: #586e75 } /* Comment.Multiline */
.highlight .cp { color: #859900 } /* Comment.Preproc */
.highlight .c1 { color: #586e75 } /* Comment.Single */
.highlight .cs { color: #859900 } /* Comment.Special */
.highlight .gd { color: #2aa198 } /* Generic.Deleted */
.highlight .ge { color: #93a1a1; font-style: italic } /* Generic.Emph */
.highlight .gr { color: #dc322f } /* Generic.Error */
.highlight .gh { color: #cb4b16 } /* Generic.Heading */
.highlight .gi { color: #859900 } /* Generic.Inserted */
.highlight .go { color: #93a1a1 } /* Generic.Output */
.highlight .gp { color: #93a1a1 } /* Generic.Prompt */
.highlight .gs { color: #93a1a1; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #cb4b16 } /* Generic.Subheading */
.highlight .gt { color: #93a1a1 } /* Generic.Traceback */
.highlight .kc { color: #cb4b16 } /* Keyword.Constant */
.highlight .kd { color: #268bd2 } /* Keyword.Declaration */
.highlight .kn { color: #859900 } /* Keyword.Namespace */
.highlight .kp { color: #859900 } /* Keyword.Pseudo */
.highlight .kr { color: #268bd2 } /* Keyword.Reserved */
.highlight .kt { color: #dc322f } /* Keyword.Type */
.highlight .ld { color: #93a1a1 } /* Literal.Date */
.highlight .m { color: #2aa198 } /* Literal.Number */
.highlight .s { color: #2aa198 } /* Literal.String */
.highlight .na { color: #93a1a1 } /* Name.Attribute */
.highlight .nb { color: #B58900 } /* Name.Builtin */
.highlight .nc { color: #268bd2 } /* Name.Class */
.highlight .no { color: #cb4b16 } /* Name.Constant */
.highlight .nd { color: #268bd2 } /* Name.Decorator */
.highlight .ni { color: #cb4b16 } /* Name.Entity */
.highlight .ne { color: #cb4b16 } /* Name.Exception */
.highlight .nf { color: #268bd2 } /* Name.Function */
.highlight .nl { color: #93a1a1 } /* Name.Label */
.highlight .nn { color: #93a1a1 } /* Name.Namespace */
.highlight .nx { color: #93a1a1 } /* Name.Other */
.highlight .py { color: #93a1a1 } /* Name.Property */
.highlight .nt { color: #268bd2 } /* Name.Tag */
.highlight .nv { color: #268bd2 } /* Name.Variable */
.highlight .ow { color: #859900 } /* Operator.Word */
.highlight .w { color: #93a1a1 } /* Text.Whitespace */
.highlight .mf { color: #2aa198 } /* Literal.Number.Float */
.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */
.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */
.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */
.highlight .sb { color: #586e75 } /* Literal.String.Backtick */
.highlight .sc { color: #2aa198 } /* Literal.String.Char */
.highlight .sd { color: #93a1a1 } /* Literal.String.Doc */
.highlight .s2 { color: #2aa198 } /* Literal.String.Double */
.highlight .se { color: #cb4b16 } /* Literal.String.Escape */
.highlight .sh { color: #93a1a1 } /* Literal.String.Heredoc */
.highlight .si { color: #2aa198 } /* Literal.String.Interpol */
.highlight .sx { color: #2aa198 } /* Literal.String.Other */
.highlight .sr { color: #dc322f } /* Literal.String.Regex */
.highlight .s1 { color: #2aa198 } /* Literal.String.Single */
.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */
.highlight .bp { color: #268bd2 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #268bd2 } /* Name.Variable.Class */
.highlight .vg { color: #268bd2 } /* Name.Variable.Global */
.highlight .vi { color: #268bd2 } /* Name.Variable.Instance */
.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */

View File

@ -1,55 +0,0 @@
.wordcloud {
padding: 0.1rem;
text-align:center;
margin:auto;
}
@media screen and (min-width: 700px) {
.wordcloud {
width: 400px;
}
}
.size-1 { font-size:1.0rem; }
.size-2 { font-size:1.1rem; }
.size-3 { font-size:1.2rem; }
.size-4 { font-size:1.3rem; }
.size-5 { font-size:1.4rem; }
.size-6 { font-size:1.5rem; }
.size-7 { font-size:1.6rem; }
.size-8 { font-size:1.7rem; }
.size-9 { font-size:1.8rem; }
.size-10 { font-size:1.9rem; }
.size-11 { font-size:2.0rem; }
.size-12 { font-size:2.1rem; }
.size-13 { font-size:2.2rem; }
.size-14 { font-size:2.3rem; }
.size-15 { font-size:2.4rem; }
.size-16 { font-size:2.5rem; }
.size-17 { font-size:2.6rem; }
.size-18 { font-size:2.7rem; }
.size-19 { font-size:2.8rem; }
.size-20 { font-size:2.9rem; }
.size-21 { font-size:3.0rem; }
.size-22 { font-size:3.1rem; }
.size-23 { font-size:3.2rem; }
.size-24 { font-size:3.3rem; }
.size-25 { font-size:3.4rem; }
.size-26 { font-size:3.5rem; }
.size-27 { font-size:3.6rem; }
.size-28 { font-size:3.7rem; }
.size-29 { font-size:3.8rem; }
.size-30 { font-size:3.9rem; }
.size-31 { font-size:4.0rem; }
.size-32 { font-size:4.1rem; }
.size-33 { font-size:4.2rem; }
.size-34 { font-size:4.3rem; }
.size-35 { font-size:4.4rem; }
.size-36 { font-size:4.5rem; }
.size-37 { font-size:4.6rem; }
.size-38 { font-size:4.7rem; }
.size-39 { font-size:4.8rem; }
.size-40 { font-size:4.9rem; }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

View File

@ -1 +0,0 @@
<!-- <script async defer data-website-id="99b8ebba-c085-4c3e-972f-968c9e052eea" src="https://analytics.tyrel.pw/umami.js"></script> -->

View File

@ -1,22 +0,0 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME }} | Archives{% endblock %}
{% block content %}
<h1>Archives</h1>
{# based on http://stackoverflow.com/questions/12764291/jinja2-group-by-month-year #}
{% for year, year_group in dates|groupby('date.year')|reverse %}
{% for month, month_group in year_group|groupby('date.month')|reverse %}
<h4 class="date">{{ (month_group|first).date|strftime('%b %Y') }}</h4>
<div class="post archives">
<ul>
{% for article in month_group %}
<li><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a></li>
{% endfor %}
</ul>
</div>
{% endfor %}
{% endfor %}
{% endblock %}

View File

@ -1,17 +0,0 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
{% if article.tags %}
<meta name="keywords" content="{{ article.tags|join(",") }}" />
{% endif %}
{% if article.description %}
<meta name="description" content="{{ article.description }}" />
{% endif %}
{% endblock %}
{% block title %}{{ SITENAME }} | {{ article.title|striptags }}{% endblock %}
{% block content %}
{% include "article_stub.html" %}
{% endblock %}

View File

@ -1,36 +0,0 @@
{% if not articles_page or first_article_of_day %}
<h4 class="date">{{ article.date.strftime("%b %d, %Y") }}</h4>
{% endif %}
<article class="post">
{% if article.title %}
<h2 class="title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permanent Link to &quot;{{ article.title|striptags }}&quot;">{{ article.title }}</a>
</h2>
{% endif %}
{% if not articles_page %}
{% include "translations.html" %}
{% endif %}
{{ article.content }}
<div class="clear"></div>
<div class="info">
{% if article.category.name != "misc" %}
<a href="{{ SITEURL }}/{{ article.category.url }}" rel="tag">{{ article.category }}</a>
{% endif %}
{% if article.tags %}
&nbsp;&middot;&nbsp;&middot;&nbsp;&middot;
{% for t in article.tags %}
&nbsp;<a href="{{ SITEURL }}/{{ t.url }}" class="tags{% if tag and tag.name == t.name %} selected{% endif %}">{{ t }}</a>
{% endfor %}
{% endif %}
</div>
{% if articles_page and DISQUS_SITENAME %}
<a href="{{ SITEURL }}/{{ article.url }}#disqus_thread">Click to read and post comments</a>
{% else %}
{% include "disqus.html" %}
{% endif %}
</article>

View File

@ -1,7 +0,0 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} | Articles by {{ author }}{% endblock %}
{% block ephemeral_nav %}
{{ ephemeral_nav_link(author, output_file, True) }}
{% endblock %}

View File

@ -1,130 +0,0 @@
{% macro ephemeral_nav_link(what, where, selected=False) -%}
<li class="ephemeral{% if selected %} selected{% endif %}"><a href="{{ SITEURL }}/{{ where }}">{{what}}</a></li>
{%- endmacro -%}
<!DOCTYPE html>
<html lang="{{ DEFAULT_LANG }}">
<head>
{% block head %}
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="fediverse:creator" content="@tyrel@mastodon.social" />
<title>{% block title %}{{ SITENAME }}{% endblock title %}</title>
<link href="https://mastodon.social/@tyrel" rel="me">
{# favicon #}
<link rel="shortcut icon" type="image/png" href="{{ SITEURL }}/favicon.png">
<link rel="shortcut icon" type="image/x-icon" href="{{ SITEURL }}/favicon.ico">
{% 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(slug=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(slug=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(slug=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(slug=tag.slug) }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Tags RSS Feed" />
{% endif %}
{% assets filters="cssmin", output="css/main.min.css", "css/main.css" %}
<link rel="stylesheet" href="{{ SITEURL }}/{{ ASSET_URL }}">
{% endassets%}
{% assets filters="cssmin", output="css/pygments.min.css", "css/pygments.css" %}
<link rel="stylesheet" href="{{ SITEURL }}/{{ ASSET_URL }}">
{% endassets%}
{% if DARK_LIGHT_SWITCHING_OFF == False %}
<style>
@media (prefers-color-scheme: light) {
:root {
--main-bg-color: #FFFFFF;
--accent-color: #FFFFFF;
--tab-bg-hover: #d3d3d3;
--info-bg-color: #CCC;
}
}
</style>
{% endif %}
<meta name="generator" content="Pelican" />
<meta name="description" content="{{ SITEDESCRIPTION }}" />
<meta name="author" content="{{ AUTHOR }}" />
{% include 'analytics.html' %}
{% endblock head %}
{% block extrahead %}
{% endblock extrahead %}
</head>
<body>
{% if DISPLAY_HEADER or DISPLAY_HEADER is not defined %}
<header>
<div class="header_box" style="height: 50px">
<h1 class="site_title">
<a href="{{ SITEURL }}/">
<span>{{ SITENAME }}</span>
</a>
</h1>
{% if SITESUBTITLE %}
<h2 class="site_subtitle">{{ SITESUBTITLE }}</h2>
{% endif %}
</div>
{% if DISPLAY_MENU or DISPLAY_MENU is not defined %}
<nav style="overflow: hidden;">
<ul>
{% block ephemeral_nav %}{% endblock %}
{% if DISPLAY_HOME or DISPLAY_HOME is not defined %}
<li{% if output_file == "index.html" %} class="selected"{% endif %}><a href="{{ SITEURL }}/">Home</a></li>
{% endif %}
{% for name, link, file in MENU_INTERNAL_PAGES %}
<li {% if output_file == file %} class="selected"{% endif %}><a href="{{ SITEURL }}/{{ link }}">{{ name }}</a></li>
{% endfor %}
{% if DISPLAY_PAGES_ON_MENU %}
{% for p in pages %}
<li{% if p == page %} class="selected"{% endif %}><a href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a></li>
{% endfor %}
{% endif %}
</ul>
<ul>
{% for title, link in MENUITEMS %}
<li {% if output_file == file %} class="selected"{% endif %}><a href="{{ link }}">{{ title }}</a></li>
{% endfor %}
</ul>
</nav>
{% endif %}
</header>
{% endif %}
<div id="wrapper">
<div id="content">
{%- block content -%}{%- endblock %}
{% if DISPLAY_FOOTER or DISPLAY_FOOTER is not defined %}
<div class="clear"></div>
<footer>
<p>
{% if FEED_ALL_ATOM %}
<a href="{{ SITEURL }}/{{ FEED_ALL_ATOM }}" rel="alternate">Atom Feed</a>
{% endif %}
{% if FEED_ALL_RSS %}
&middot;
<a href="{{ SITEURL }}/{{ FEED_ALL_RSS }}" rel="alternate">Rss Feed</a>
{% endif %}
</footer>
{% endif %}
</div>
<div class="clear"></div>
</div>
</body>
</html>

View File

@ -1,6 +0,0 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} | articles in the "{{ category }}" category{% if articles_page.number != 1 %} | Page {{ articles_page.number }}{% endif %}{% endblock %}
{% block ephemeral_nav %}
{{ ephemeral_nav_link(category, output_file, True) }}
{% endblock %}

View File

@ -1,12 +0,0 @@
{% if DISQUS_SITENAME %}
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_shortname = '{{ DISQUS_SITENAME }}';
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
{% endif %}

View File

@ -1,17 +0,0 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME }}{% if articles_page.number != 1 %} | Page {{ articles_page.number }}{% endif %}{% endblock %}
{% block content %}
{% set date = None %}
{% for article in articles_page.object_list %}
{% if date != article.date.date() %}
{% set first_article_of_day = True %}
{% else %}
{% set first_article_of_day = False %}
{% endif %}
{% set date = article.date.date() %}
{% include "article_stub.html" %}
{% endfor %}
{% include "pagination.html" %}
{% endblock %}

View File

@ -1,11 +0,0 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME }} | {{ page.title }}{% endblock %}
{% block content %}
<div class="page">
<h1>{{ page.title }}</h1>
{{ page.content }}
</div>
{% endblock %}

View File

@ -1,17 +0,0 @@
{# Use PAGINATION_PATTERNS or pagination may break #}
{% if DEFAULT_PAGINATION and (articles_page.has_previous() or articles_page.has_next()) %}
<div class="clear"></div>
<div class="pages">
{% if articles_page.has_previous() %}
<a href="{{ SITEURL }}/{{ articles_previous_page.url }}" class="prev_page">&larr;&nbsp;Previous</a>
{% endif %}
{% if articles_page.has_next() %}
<a href="{{ SITEURL }}/{{ articles_next_page.url }}" class="next_page">Next&nbsp;&rarr;</a>
{% endif %}
<span>Page {{ articles_page.number }} of {{ articles_paginator.num_pages }}</span>
</div>
{% endif %}

View File

@ -1,5 +0,0 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} | articles tagged "{{ tag }}"{% if articles_page.number != 1 %} | Page {{ articles_page.number }}{% endif %}{% endblock %}
{% block ephemeral_nav %}
{{ ephemeral_nav_link(tag, output_file, True) }}
{% endblock %}

View File

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

View File

@ -0,0 +1,12 @@
@font-face {
font-family: 'Yanone Kaffeesatz';
font-style: normal;
font-weight: 400;
src:
local('Yanone Kaffeesatz Regular'),
local('YanoneKaffeesatz-Regular'),
/* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */
url('../fonts/Yanone_Kaffeesatz_400.woff') format('woff'),
/* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */
url('../fonts/Yanone_Kaffeesatz_400.woff2') format('woff2');
}

View File

@ -0,0 +1,482 @@
/*
Name: Smashing HTML5
Date: July 2009
Description: Sample layout for HTML5 and CSS3 goodness.
Version: 1.0
License: MIT <https://opensource.org/licenses/MIT>
Licensed by: Smashing Media GmbH <https://www.smashingmagazine.com/>
Original author: Enrique Ramírez <http://enrique-ramirez.com/>
*/
/* Imports */
@import url("reset.css");
@import url("pygment.css");
@import url("typogrify.css");
@import url("fonts.css");
/***** Global *****/
/* Body */
body {
background: #F5F4EF;
color: #000305;
font-size: 87.5%; /* Base font size: 14px */
font-family: 'Trebuchet MS', Trebuchet, 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
line-height: 1.429;
margin: 0;
padding: 0;
text-align: left;
}
/* Headings */
h1 {font-size: 2em }
h2 {font-size: 1.571em} /* 22px */
h3 {font-size: 1.429em} /* 20px */
h4 {font-size: 1.286em} /* 18px */
h5 {font-size: 1.143em} /* 16px */
h6 {font-size: 1em} /* 14px */
h1, h2, h3, h4, h5, h6 {
font-weight: 400;
line-height: 1.1;
margin-bottom: .8em;
font-family: 'Yanone Kaffeesatz', arial, serif;
}
h3, h4, h5, h6 { margin-top: .8em; }
hr { border: 2px solid #EEEEEE; }
/* Anchors */
a {outline: 0;}
a img {border: 0px; text-decoration: none;}
a:link, a:visited {
color: #C74350;
padding: 0 1px;
text-decoration: underline;
}
a:hover, a:active {
background-color: #C74350;
color: #fff;
text-decoration: none;
text-shadow: 1px 1px 1px #333;
}
h1 a:hover {
background-color: inherit
}
/* Paragraphs */
div.line-block,
p { margin-top: 1em;
margin-bottom: 1em;}
strong, b {font-weight: bold;}
em, i {font-style: italic;}
/* Lists */
ul {
list-style: outside disc;
margin: 0em 0 0 1.5em;
}
ol {
list-style: outside decimal;
margin: 0em 0 0 1.5em;
}
li { margin-top: 0.5em;
margin-bottom: 1em; }
.post-info {
float:right;
margin:10px;
padding:5px;
}
.post-info p{
margin-top: 1px;
margin-bottom: 1px;
}
.readmore { float: right }
dl {margin: 0 0 1.5em 0;}
dt {font-weight: bold;}
dd {margin-left: 1.5em;}
pre{background-color: rgb(238, 238, 238); padding: 10px; margin: 10px; overflow: auto;}
/* Quotes */
blockquote {
margin: 20px;
font-style: italic;
}
cite {}
q {}
div.note {
float: right;
margin: 5px;
font-size: 85%;
max-width: 300px;
}
/* Tables */
table {margin: .5em auto 1.5em auto; width: 98%;}
/* Thead */
thead th {padding: .5em .4em; text-align: left;}
thead td {}
/* Tbody */
tbody td {padding: .5em .4em;}
tbody th {}
tbody .alt td {}
tbody .alt th {}
/* Tfoot */
tfoot th {}
tfoot td {}
/* HTML5 tags */
header, section, footer,
aside, nav, article, figure {
display: block;
}
/***** Layout *****/
.body {clear: both; margin: 0 auto; max-width: 800px;}
img { max-width: 100%; }
img.right, figure.right, div.figure.align-right {
float: right;
margin: 0 0 2em 2em;
}
img.left, figure.left, div.figure.align-left {
float: left;
margin: 0 2em 2em 0;
}
/* .rst support */
div.figure img, figure img { /* to fill figure exactly */
max-width: 100%;
}
div.figure p.caption, figure p.caption { /* margin provided by figure */
margin-top: 0;
margin-bottom: 0;
}
/*
Header
*****************/
#banner {
margin: 0 auto;
padding: 0.8em 0 0 0;
}
/* Banner */
#banner h1 {
font-size: 3.571em;
line-height: 1.0;
margin-bottom: .3em;
}
#banner h1 a:link, #banner h1 a:visited {
color: #000305;
display: block;
font-weight: bold;
margin: 0 0 0 .2em;
text-decoration: none;
}
#banner h1 a:hover, #banner h1 a:active {
background: none;
color: #C74350;
text-shadow: none;
}
#banner h1 strong {font-size: 0.36em; font-weight: normal;}
/* Main Nav */
#banner nav {
background: #000305;
font-size: 1.143em;
overflow: auto;
line-height: 30px;
margin: 0 auto 2em auto;
padding: 0;
text-align: center;
max-width: 800px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#banner nav ul {list-style: none; margin: 0 auto; max-width: 800px;}
#banner nav li {float: left; display: inline; margin: 0;}
#banner nav a:link, #banner nav a:visited {
color: #fff;
display: inline-block;
height: 30px;
padding: 5px 1.5em;
text-decoration: none;
}
#banner nav a:hover, #banner nav a:active,
#banner nav .active a:link, #banner nav .active a:visited {
background: #C74451;
color: #fff;
text-shadow: none !important;
}
#banner nav li:first-child a {
border-top-left-radius: 5px;
-moz-border-radius-topleft: 5px;
-webkit-border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-left-radius: 5px;
}
/*
Featured
*****************/
#featured {
background: #fff;
margin-bottom: 2em;
overflow: hidden;
padding: 20px;
max-width: 760px;
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
#featured figure {
border: 2px solid #eee;
float: right;
margin: 0.786em 2em 0 5em;
max-width: 248px;
}
#featured figure img {display: block; float: right;}
#featured h2 {color: #C74451; font-size: 1.714em; margin-bottom: 0.333em;}
#featured h3 {font-size: 1.429em; margin-bottom: .5em;}
#featured h3 a:link, #featured h3 a:visited {color: #000305; text-decoration: none;}
#featured h3 a:hover, #featured h3 a:active {color: #fff;}
/*
Body
*****************/
#content {
background: #fff;
margin-bottom: 2em;
overflow: hidden;
padding: 20px 20px;
max-width: 760px;
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
/*
Extras
*****************/
#extras {margin: 0 auto 3em auto; overflow: hidden;}
#extras ul {list-style: none; margin: 0;}
#extras li {border-bottom: 1px solid #fff;}
#extras h2 {
color: #C74350;
font-size: 1.429em;
margin-bottom: .25em;
padding: 0 3px;
}
#extras a:link, #extras a:visited {
color: #444;
display: block;
border-bottom: 1px solid #F4E3E3;
text-decoration: none;
padding: .3em .25em;
}
#extras a:hover, #extras a:active {color: #fff;}
/* Blogroll */
#extras .blogroll {
float: left;
max-width: 615px;
}
#extras .blogroll li {float: left; margin: 0 20px 0 0; max-width: 185px;}
/* Social */
#extras .social {
float: right;
max-width: 175px;
}
#extras div[class='social'] a {
background-repeat: no-repeat;
background-position: 3px 6px;
padding-left: 25px;
}
/* Icons */
.social a[href*='about.me'] {background-image: url('../images/icons/aboutme.png');}
.social a[href*='bitbucket.org'] {background-image: url('../images/icons/bitbucket.png');}
.social a[href*='delicious.com'] {background-image: url('../images/icons/delicious.png');}
.social a[href*='facebook.com'] {background-image: url('../images/icons/facebook.png');}
.social a[href*='gitorious.org'] {background-image: url('../images/icons/gitorious.png');}
.social a[href*='github.com'],
.social a[href*='git.io'] {
background-image: url('../images/icons/github.png');
background-size: 16px 16px;
}
.social a[href*='gittip.com'] {background-image: url('../images/icons/gittip.png');}
.social a[href*='plus.google.com'] {background-image: url('../images/icons/google-plus.png');}
.social a[href*='groups.google.com'] {background-image: url('../images/icons/google-groups.png');}
.social a[href*='news.ycombinator.com'],
.social a[href*='hackernewsers.com'] {background-image: url('../images/icons/hackernews.png');}
.social a[href*='last.fm'], .social a[href*='lastfm.'] {background-image: url('../images/icons/lastfm.png');}
.social a[href*='linkedin.com'] {background-image: url('../images/icons/linkedin.png');}
.social a[href*='reddit.com'] {background-image: url('../images/icons/reddit.png');}
.social a[type$='atom+xml'], .social a[type$='rss+xml'] {background-image: url('../images/icons/rss.png');}
.social a[href*='slideshare.net'] {background-image: url('../images/icons/slideshare.png');}
.social a[href*='speakerdeck.com'] {background-image: url('../images/icons/speakerdeck.png');}
.social a[href*='stackoverflow.com'] {background-image: url('../images/icons/stackoverflow.png');}
.social a[href*='twitter.com'] {background-image: url('../images/icons/twitter.png');}
.social a[href*='vimeo.com'] {background-image: url('../images/icons/vimeo.png');}
.social a[href*='youtube.com'] {background-image: url('../images/icons/youtube.png');}
/*
About
*****************/
#about {
background: #fff;
font-style: normal;
margin-bottom: 2em;
overflow: hidden;
padding: 20px;
text-align: left;
max-width: 760px;
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
#about .primary {float: left; max-width: 165px;}
#about .primary strong {color: #C64350; display: block; font-size: 1.286em;}
#about .photo {float: left; margin: 5px 20px;}
#about .url:link, #about .url:visited {text-decoration: none;}
#about .bio {float: right; max-width: 500px;}
/*
Footer
*****************/
#contentinfo {padding-bottom: 2em; text-align: right;}
/***** Sections *****/
/* Blog */
.hentry {
display: block;
clear: both;
border-top: 1px solid #eee;
padding: 1.5em 0;
}
li:first-child .hentry, #content > .hentry {border: 0; margin: 0;}
#content > .hentry {padding: 1em 0;}
.hentry img{display : none ;}
.entry-title {font-size: 3em; margin-bottom: 10px; margin-top: 0;}
.entry-title a:link, .entry-title a:visited {text-decoration: none; color: #333;}
.entry-title a:visited {background-color: #fff;}
.hentry .post-info * {font-style: normal;}
/* Content */
.hentry footer {margin-bottom: 2em;}
.hentry footer address {display: inline;}
#posts-list footer address {display: block;}
/* Blog Index */
#posts-list {list-style: none; margin: 0;}
#posts-list .hentry {padding-left: 10px; position: relative;}
#posts-list footer {
left: 10px;
position: relative;
float: left;
top: 0.5em;
max-width: 190px;
}
/* About the Author */
#about-author {
background: #f9f9f9;
clear: both;
font-style: normal;
margin: 2em 0;
padding: 10px 20px 15px 20px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#about-author strong {
color: #C64350;
clear: both;
display: block;
font-size: 1.429em;
}
#about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;}
/* Comments */
#comments-list {list-style: none; margin: 0 1em;}
#comments-list blockquote {
background: #f8f8f8;
clear: both;
font-style: normal;
margin: 0;
padding: 15px 20px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;}
#comments-list li:nth-child(2n) blockquote {background: #F5f5f5;}
/* Add a Comment */
#add-comment label {clear: left; float: left; text-align: left; max-width: 150px;}
#add-comment input[type='text'],
#add-comment input[type='email'],
#add-comment input[type='url'] {float: left; max-width: 200px;}
#add-comment textarea {float: left; height: 150px; max-width: 495px;}
#add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;}
#add-comment input[type='submit'] {float: right; margin: 0 .5em;}
#add-comment * {margin-bottom: .5em;}
.literal {
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border: 1px solid #BCBEC0;
padding: 2px;
font:12px Monaco,Consolas,"Andale Mono","DejaVu Sans Mono",monospace
}

View File

@ -1,5 +1,5 @@
.hll { .hll {
background-color:#FFFFCC; background-color:#eee;
} }
.c { .c {
color:#408090; color:#408090;

View File

@ -0,0 +1,52 @@
/*
Name: Reset Stylesheet
Description: Resets browser's default CSS
Author: Eric Meyer
Author URI: https://meyerweb.com/eric/tools/css/reset/
*/
/* v1.0 | 20080212 */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
background: transparent;
border: 0;
font-size: 100%;
margin: 0;
outline: 0;
padding: 0;
vertical-align: baseline;
}
body {line-height: 1;}
ol, ul {list-style: none;}
blockquote, q {quotes: none;}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
/* remember to define focus styles! */
:focus {
outline: 0;
}
/* remember to highlight inserts somehow! */
ins {text-decoration: none;}
del {text-decoration: line-through;}
/* tables still need 'cellspacing="0"' in the markup */
table {
border-collapse: collapse;
border-spacing: 0;
}

View File

@ -0,0 +1,3 @@
.caps {font-size:.92em;}
.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;}
.dquo {margin-left:-.38em;}

View File

@ -0,0 +1,57 @@
@import url("main.css");
.literal {
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border: 1px solid #BCBEC0;
padding: 2px;
font:12px Monaco,Consolas,"Andale Mono","DejaVu Sans Mono",monospace
}
body {
font:1.3em/1.3 "Hoefler Text","Georgia",Georgia,serif,sans-serif;
}
.post-info{
display: none;
}
#banner nav {
display: none;
-moz-border-radius: 0px;
margin-bottom: 20px;
overflow: hidden;
font-size: 1em;
background: #F5F4EF;
}
#banner nav ul{
padding-right: 50px;
}
#banner nav li{
float: right;
color: #000;
}
#banner nav li a {
color: #000;
}
#banner h1 {
margin-bottom: -18px;
}
#featured, #extras {
padding: 50px;
}
#featured {
padding-top: 20px;
}
#extras {
padding-top: 0px;
padding-bottom: 0px;
}

Binary file not shown.

View File

@ -0,0 +1,407 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<defs >
<font id="YanoneKaffeesatz" horiz-adv-x="384" ><font-face
font-family="Yanone Kaffeesatz"
units-per-em="1000"
panose-1="0 0 5 0 0 0 0 0 0 0"
ascent="957"
descent="-200"
alphabetic="0" />
<glyph unicode=" " glyph-name="space" horiz-adv-x="158" />
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="195" d="M45 683Q45 694 53 699T83 705T155 706L139 251Q138 233 131 226T109 216T59 213L45 683ZM68 -7T55 7T42 50Q42 74 57 91T97 108Q153 108 153 50Q153 26 138 10T97 -7Q68 -7 55 7Z" />
<glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="263" d="M42 607T37 667T31 760Q31 781 34 782Q41 786 65 786Q95 786 110 783Q110 740 103 665T89 586Q82 585 67 584T45 583Q42 607 37 667ZM166 590T160 659T153 761Q153 781 156 782Q163 786 187
786Q218 786 233 783Q233 742 225 666T212 586Q205 585 190 584T168 583Q166 590 160 659Z" />
<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="418" d="M323 254H390Q390 213 388 202T374 190H320L316 123Q315 112 302 110T245 107L249 190H154L150 123Q149 112 136 110T79 107L83 190H28Q28 232 30 243T44 254H87L92 360H28Q28 402 30 413T44
424H96L99 487Q100 498 114 500T170 503L166 424H262L265 487Q266 498 280 500T336 503L332 424H390Q390 383 388 372T374 360H328L323 254ZM157 254H253L258 360H162L157 254Z" />
<glyph unicode="$" glyph-name="dollar" horiz-adv-x="418" d="M363 20T237 -4V-91Q237 -110 221 -116T164 -122V-7Q128 -5 103 2T66 19T53 37Q53 46 59 68T74 102Q111 72 181 72Q228 72 251 94T274 158Q274 186 262 208T219 264L107 377Q53 434 53 488Q53 542
86 574T181 615V704Q181 724 198 730T254 737V616Q304 613 330 602T357 581Q357 569 352 553T337 525Q326 533 299 539T239 546Q142 546 142 489Q142 469 152 452T185 409L306 288Q336 258 349 227T363 157Q363 20 237 -4Z" />
<glyph unicode="%" glyph-name="percent" horiz-adv-x="692" d="M162 -7T150 -3T127 8T116 23L520 709Q523 708 534 703T555 691T565 674Q565 667 397 382T166 -8Q162 -7 150 -3ZM132 339T104 353T60 408T45 525Q45 618 81 663T186 708Q233 708 261 692T304 636T319
526Q319 339 180 339Q132 339 104 353ZM212 402T228 430T245 525Q245 574 239 600T220 636T186 646Q154 646 138 619T122 523Q122 473 128 447T148 412T182 402Q212 402 228 430ZM460 -9T431 5T387 60T372 177Q372 270 408 315T514 360Q561 360 589 344T632 288T647
178Q647 -9 508 -9Q460 -9 431 5ZM539 52T555 80T572 175Q572 224 566 250T548 286T513 296Q481 296 465 269T448 173Q448 123 454 97T474 62T509 52Q539 52 555 80Z" />
<glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="502" d="M458 70T488 55Q485 31 468 11T435 -10Q420 -10 362 54Q306 -10 212 -10Q27 -10 27 170Q27 229 59 278T139 358Q61 494 61 568Q61 636 104 671T228 706Q293 706 335 692T377 659Q377 644 372
627T357 600Q330 619 301 627T237 635Q193 635 170 620T146 558Q146 508 205 405T343 201Q351 241 351 291Q351 423 291 496Q332 504 405 504Q447 504 483 501Q483 499 484 490T485 472Q485 453 477 444T443 435L394 436Q411 405 420 374T429 281Q429 194 404 129Q458
70 488 55ZM272 66T309 115Q242 196 174 300Q110 254 110 168Q110 124 133 95T207 66Q272 66 309 115Z" />
<glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="141" d="M42 607T37 667T31 760Q31 781 34 782Q41 786 65 786Q95 786 110 783Q110 740 103 665T89 586Q82 585 67 584T45 583Q42 607 37 667Z" />
<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="292" d="M212 -196T172 -135T99 43T65 320Q65 470 98 578T172 744T226 803Q246 803 255 792T271 752Q218 680 183 573T147 318Q147 211 166 119T213 -38T271 -136Q265 -166 256 -181T227 -196Q212 -196 172 -135Z" />
<glyph unicode=")" glyph-name="parenright" horiz-adv-x="292" d="M47 -196T37 -181T21 -136Q71 -70 108 44T145 318Q145 460 110 573T21 752Q28 781 37 792T66 803Q79 803 119 746T193 581T227 320Q227 168 194 52T120 -130T65 -196Q47 -196 37 -181Z" />
<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="470" d="M199 667Q198 678 206 683T229 688Q256 688 278 677L258 519Q256 510 252 506T239 501Q231 501 221 504L199 667ZM269 469T269 478Q269 489 282 495L431 575Q441 566 447 551T454 521Q454 498 439
494L280 455Q269 469 269 478ZM16 503Q15 532 29 551T60 570Q63 570 69 568L199 487Q200 470 194 463T175 459L16 503ZM249 404Q246 410 246 414Q246 424 271 434L386 299Q390 294 390 288Q390 274 370 261T327 245L249 404ZM130 250T120 250Q107 250 92 266T66
300L187 423Q195 431 202 431Q212 431 224 415L136 259Q130 250 120 250Z" />
<glyph unicode="+" glyph-name="plus" horiz-adv-x="418" d="M384 317Q384 275 382 261T368 247H245V123Q245 112 231 110T174 107V247H34Q34 290 36 303T51 317H174V441Q174 452 188 454T245 457V317H384Z" />
<glyph unicode="," glyph-name="comma" horiz-adv-x="183" d="M43 -103T38 -80Q54 -53 59 -36T67 5Q43 21 43 54Q43 77 57 91T94 106Q148 106 148 47Q148 13 133 -21T99 -79T70 -103Q43 -103 38 -80Z" />
<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="278" d="M37 290T39 303T54 317H241Q241 275 239 261T225 247H37Q37 290 39 303Z" />
<glyph unicode="." glyph-name="period" horiz-adv-x="183" d="M63 -6T50 8T37 51Q37 75 52 91T93 108Q148 108 148 51Q148 26 133 10T93 -6Q63 -6 50 8Z" />
<glyph unicode="/" glyph-name="slash" horiz-adv-x="334" d="M235 743Q238 754 243 758T265 763T324 765L99 0Q96 -10 91 -14T69 -19T10 -20L235 743Z" />
<glyph unicode="0" glyph-name="zero" horiz-adv-x="418" d="M107 -9T68 65T29 296Q29 448 72 524T211 600Q306 600 347 532T389 320Q389 151 348 71T206 -9Q107 -9 68 65ZM260 64T282 124T305 321Q305 428 285 478T215 529Q160 529 138 469T116 290Q116 206 124
157T153 86T208 64Q260 64 282 124Z" />
<glyph unicode="1" glyph-name="one" horiz-adv-x="418" d="M28 32T28 56Q28 67 72 71T173 76L184 517Q163 516 123 509T70 499Q58 519 58 552Q58 558 97 569T183 590T247 600Q263 600 270 595L257 76H331Q353 76 368 77T389 79Q389 32 387 16T373 0H30Q28 32 28 56Z" />
<glyph unicode="2" glyph-name="two" horiz-adv-x="418" d="M29 11T29 25Q29 45 33 56T54 96Q76 133 102 167T167 247Q227 317 255 362T283 454Q283 523 206 523Q166 523 125 513T59 488Q49 511 49 547Q49 559 73 571T139 592T226 600Q309 600 341 567T374 464Q374
403 342 349T243 217Q171 131 136 76H271Q304 76 341 79T389 83Q389 34 386 17T372 0H33Q29 11 29 25Z" />
<glyph unicode="3" glyph-name="three" horiz-adv-x="418" d="M99 -100T72 -86T44 -51Q44 -27 49 -11T55 9Q90 -23 153 -23Q218 -23 254 25T291 150Q291 209 248 231T132 254L130 305Q194 336 228 376T263 458Q263 486 248 504T191 523Q111 523 53 487Q43 507
43 546Q43 559 64 571T125 592T216 600Q290 600 322 568T355 482Q355 380 245 301Q305 295 341 259T378 152Q378 71 349 15T269 -71T152 -100Q99 -100 72 -86Z" />
<glyph unicode="4" glyph-name="four" horiz-adv-x="418" d="M235 131H54Q28 157 28 202Q28 227 65 311T152 478T237 592Q254 606 273 606Q297 606 319 595L316 206Q344 206 364 207T390 209Q391 208 392 202T394 186Q394 162 388 147T367 131H316V26Q316 12 313
7T295 1T235 0V131ZM235 206L247 495Q208 450 161 361T98 206H235Z" />
<glyph unicode="5" glyph-name="five" horiz-adv-x="418" d="M111 -100T85 -93T47 -77T34 -59Q34 -19 43 7Q78 -25 141 -25Q218 -25 256 33T294 178Q294 259 255 289T139 319Q100 319 42 306L71 600H377Q377 568 375 554T363 534T335 528Q291 528 229 529T140
532L124 381Q159 386 187 386Q380 386 380 194Q380 56 322 -22T148 -100Q111 -100 85 -93Z" />
<glyph unicode="6" glyph-name="six" horiz-adv-x="418" d="M313 439T352 392T391 245Q391 -8 202 -8Q128 -8 91 29T43 132T31 308Q31 702 259 702Q306 702 336 694T367 668Q367 636 359 611Q317 626 265 626Q119 626 108 367Q132 403 165 421T246 439Q313 439
352 392ZM255 64T283 110T312 228Q312 295 289 330T223 365Q157 365 108 290V284Q106 169 129 117T205 64Q255 64 283 110Z" />
<glyph unicode="7" glyph-name="seven" horiz-adv-x="418" d="M115 -88T98 -84T80 -66Q93 35 128 149T208 365T294 531Q220 527 67 527Q45 527 45 600H405Q303 403 242 238T163 -88Q115 -88 98 -84Z" />
<glyph unicode="8" glyph-name="eight" horiz-adv-x="418" d="M362 293T377 259T392 182Q392 99 347 46T218 -8Q123 -8 78 45T32 183Q32 245 63 295T146 376Q101 407 81 429Q60 448 50 475T39 534Q39 617 87 661T210 706Q387 706 387 544Q387 485 358 444T279
369Q317 339 333 323Q362 293 377 259ZM176 630T148 608T119 539Q119 489 159 457Q180 438 219 411Q313 469 313 541Q313 585 286 607T220 630Q176 630 148 608ZM259 69T286 100T313 183Q313 220 302 243T268 286Q248 307 210 333Q163 309 135 272T107 188Q107
133 135 101T213 69Q259 69 286 100Z" />
<glyph unicode="9" glyph-name="nine" horiz-adv-x="418" d="M288 609T324 580T373 486T389 297Q387 92 327 -6T138 -104Q98 -104 74 -96T49 -71Q49 -58 51 -43T56 -17Q89 -27 129 -27Q220 -27 261 39T310 229Q286 193 254 175T174 157Q109 157 69 209T28 358Q28
485 75 547T217 609Q288 609 324 580ZM263 231T312 306V310Q312 392 305 439T278 512T218 537Q165 537 136 495T107 368Q107 302 131 267T198 231Q263 231 312 306Z" />
<glyph unicode=":" glyph-name="colon" horiz-adv-x="183" d="M63 329T51 343T38 386Q38 410 53 426T93 443Q149 443 149 386Q149 361 134 345T93 329Q63 329 51 343ZM63 -6T51 8T38 51Q38 75 53 91T93 108Q149 108 149 51Q149 26 134 10T93 -6Q63 -6 51 8Z" />
<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="183" d="M61 329T49 343T36 386Q36 410 51 426T91 443Q147 443 147 386Q147 361 132 345T91 329Q61 329 49 343ZM39 -103T34 -80Q50 -54 55 -37T63 5Q39 21 39 54Q39 77 53 91T90 106Q144 106 144 47Q144
13 129 -21T95 -79T66 -103Q39 -103 34 -80Z" />
<glyph unicode="&lt;" glyph-name="less" horiz-adv-x="400" d="M318 96T297 103L52 211Q39 234 39 258Q39 289 65 302L329 430Q342 418 349 404T357 377Q357 359 343 353L144 255L360 159Q359 134 348 115T324 96Q318 96 297 103Z" />
<glyph unicode="=" glyph-name="equal" horiz-adv-x="418" d="M34 382T36 396T51 410H384Q384 367 382 353T368 339H34Q34 382 36 396ZM34 197T36 210T51 224H384Q384 182 382 168T368 154H34Q34 197 36 210Z" />
<glyph unicode="&gt;" glyph-name="greater" horiz-adv-x="400" d="M62 97T55 112T46 139Q46 157 60 164L260 261L43 358Q44 383 56 401T80 420Q90 420 107 413L351 305Q364 285 364 258Q364 227 338 214L74 85Q62 97 55 112Z" />
<glyph unicode="?" glyph-name="question" horiz-adv-x="295" d="M92 210T89 219T82 244T79 278Q79 319 97 351Q109 374 124 396T143 424Q171 465 184 491T197 552Q197 629 115 629Q66 629 31 603Q19 639 19 667Q19 684 58 697T144 710Q209 710 246 675T283 570Q283
512 264 473T209 384Q182 350 172 330Q160 309 160 283Q160 271 165 243Q167 234 168 227T166 217Q156 206 120 206Q109 206 93 208Q92 210 89 219ZM100 -6T88 8T75 51Q75 75 90 91T130 108Q186 108 186 51Q186 26 171 10T130 -6Q100 -6 88 8Z" />
<glyph unicode="@" glyph-name="at" horiz-adv-x="738" d="M442 -112T496 -101T602 -68Q623 -100 623 -126Q623 -141 592 -156T505 -180T375 -190Q268 -190 199 -159T89 -29T47 264Q47 479 139 581T394 683Q545 683 619 608T693 359Q693 145 644 74T533 2Q498
2 471 25Q459 15 429 8T358 1Q319 1 293 12T252 57T237 151Q237 318 365 318Q403 318 423 307Q423 313 424 330T425 368Q426 401 411 413T364 426Q333 426 310 421T264 402Q256 419 256 448Q256 459 265 468Q281 479 312 486T391 494Q448 494 475 468T501 378L496
177Q494 104 491 78Q508 72 524 72Q545 72 564 98T597 184T610 338Q610 441 590 500T523 585T393 611Q303 611 246 578T159 466T129 253Q129 106 155 27T233 -82T369 -112Q442 -112 496 -101ZM423 258Q402 261 388 261Q352 261 333 236T314 147Q314 98 327 80T368
62Q390 62 404 74T419 114L423 258Z" />
<glyph unicode="A" glyph-name="A" horiz-adv-x="437" d="M433 6T426 2T396 -2Q369 -2 348 0L306 178H132L93 14Q90 5 84 2T55 -2Q34 -2 5 1L184 689Q187 703 214 703Q237 703 252 700L431 15Q433 6 426 2ZM288 251L254 395Q225 517 219 588Q208 499 183 395L149
251H288Z" />
<glyph unicode="B" glyph-name="B" horiz-adv-x="377" d="M44 681Q44 691 49 695T70 700H169Q337 700 337 546Q337 470 308 430T242 384Q289 381 324 350T360 238Q360 118 307 59T170 0H44V681ZM175 414Q209 414 229 443T249 530Q249 629 175 629H125V414H175ZM171
71Q212 71 238 110T265 231Q265 280 254 305T223 337T172 345H125V71H171Z" />
<glyph unicode="C" glyph-name="C" horiz-adv-x="341" d="M142 -10T107 13T51 109T30 321Q30 480 59 566T130 681T227 710Q277 710 299 694T321 655Q321 628 308 606Q277 631 243 631Q206 631 178 608T133 517T115 325Q115 227 127 173T161 99T215 79Q243 79 268
88T308 111Q320 85 320 62Q320 32 285 11T196 -10Q142 -10 107 13Z" />
<glyph unicode="D" glyph-name="D" horiz-adv-x="388" d="M44 681Q44 691 50 695T71 700H169Q237 700 279 672T342 575T364 386Q364 242 342 158T276 37T169 0H44V681ZM171 77Q201 77 223 100T259 193T273 394Q273 485 262 535T229 606T171 626H125V77H171Z" />
<glyph unicode="E" glyph-name="E" horiz-adv-x="320" d="M125 73H297Q297 44 297 26T293 4T281 0H45V684Q45 688 48 694T61 700H301Q301 672 301 654T297 632T286 627H125V418H276Q276 391 276 373T272 350T261 344H125V73Z" />
<glyph unicode="F" glyph-name="F" horiz-adv-x="313" d="M301 700Q301 672 301 656T297 635T286 631H125V418H276Q276 391 276 373T272 350T261 344H125V16Q125 11 123 6T110 0H45V684Q45 688 48 694T61 700H301Z" />
<glyph unicode="G" glyph-name="G" horiz-adv-x="386" d="M148 -10T108 18T49 121T30 334Q30 485 55 567T127 679T245 710Q293 710 322 695T352 659Q352 635 341 607Q327 618 306 624T261 631Q208 631 177 605T131 515T116 340Q116 225 128 167T162 89T220 69Q244
69 259 77T280 94V343H205V394Q205 410 224 410H355V35Q301 -10 218 -10Q148 -10 108 18Z" />
<glyph unicode="H" glyph-name="H" horiz-adv-x="410" d="M365 7T362 4T339 1T285 0V339H125V16Q125 7 122 4T98 1T44 0V684Q44 693 47 696T71 699T125 700V415H285V684Q285 693 288 696T311 699T365 700V16Q365 7 362 4Z" />
<glyph unicode="I" glyph-name="I" horiz-adv-x="169" d="M44 663Q44 683 48 690T66 698T126 700V16Q126 7 122 4T98 1T44 0V663Z" />
<glyph unicode="J" glyph-name="J" horiz-adv-x="300" d="M63 -9T39 8T14 50Q14 64 17 73T26 96Q41 82 63 73T109 63Q138 63 151 76T169 114T174 183V663Q174 684 177 690T195 698T256 700V165Q256 82 226 37T119 -9Q63 -9 39 8Z" />
<glyph unicode="K" glyph-name="K" horiz-adv-x="389" d="M371 701T371 686Q371 682 368 677L206 398Q326 307 367 18Q368 6 362 2T334 -2Q308 -2 278 1Q254 128 229 201T164 318Q151 333 124 345V16Q124 7 121 4T97 1T42 0V684Q42 693 45 696T69 699T124 700V398L284
695Q313 701 335 701Q371 701 371 686Z" />
<glyph unicode="L" glyph-name="L" horiz-adv-x="314" d="M44 677Q44 690 48 694T66 699T125 700V76H297V16Q297 7 293 4T281 0H44V677Z" />
<glyph unicode="M" glyph-name="M" horiz-adv-x="489" d="M445 700V16Q445 7 442 4T418 1T363 0L366 245Q368 310 375 410T385 546L368 486Q329 342 319 315L266 161Q263 153 255 153H220L168 315Q155 354 104 541L103 540Q106 509 113 412T121 249L123 16Q123
7 119 4T95 1T44 0V684Q44 694 48 697T60 700H118L214 396Q225 362 234 330T246 285Q249 297 257 329T275 393L364 684Q367 693 370 696T380 700H445Z" />
<glyph unicode="N" glyph-name="N" horiz-adv-x="444" d="M320 693T324 696T348 699T401 700V16Q401 0 384 0H324L209 275Q185 339 114 560Q118 517 121 416T124 259V16Q124 7 121 4T97 1T44 0V684Q44 700 60 700H121L234 430Q247 395 308 211Q312 199 330 146V149Q325
188 323 290T320 448V684Q320 693 324 696Z" />
<glyph unicode="O" glyph-name="O" horiz-adv-x="429" d="M143 -10T105 21T48 131T30 354Q30 486 50 564T113 676T222 710Q288 710 326 678T381 569T399 357Q399 220 380 140T319 25T211 -10Q143 -10 105 21ZM251 73T272 101T302 190T312 355Q312 459 304 517T276
601T220 627Q184 627 163 599T131 507T121 334Q121 238 129 182T158 99T214 73Q251 73 272 101Z" />
<glyph unicode="P" glyph-name="P" horiz-adv-x="361" d="M254 700T298 653T343 503Q343 387 293 336T160 284H124V16Q124 7 121 4T97 1T44 0V684Q44 693 47 696T60 700H159Q254 700 298 653ZM212 359T233 394T254 512Q254 569 236 599T174 629H124V359H168Q212
359 233 394Z" />
<glyph unicode="Q" glyph-name="Q" horiz-adv-x="429" d="M404 -61T407 -74T410 -97Q410 -118 382 -127T320 -137Q269 -137 239 -107T190 -9Q131 -5 97 29T46 141T30 354Q30 486 50 564T113 676T222 710Q288 710 326 678T381 569T399 357Q399 194 371 111T282
2Q288 -37 300 -53T335 -70Q372 -70 398 -53Q404 -61 407 -74ZM121 238T129 182T158 99T214 73Q251 73 272 101T302 190T312 355Q312 459 304 517T276 601T220 627Q184 627 163 599T131 507T121 334Q121 238 129 182Z" />
<glyph unicode="R" glyph-name="R" horiz-adv-x="372" d="M288 264T315 192T350 18Q350 6 343 2T309 -2Q298 -2 262 0Q255 110 231 179T180 285Q173 284 160 284H124V16Q124 7 121 4T97 1T44 0V684Q44 688 47 694T60 700H159Q254 700 298 653T343 503Q343 356
256 306Q288 264 315 192ZM168 359Q212 359 233 393T254 506Q254 567 236 598T174 629H124V359H168Z" />
<glyph unicode="S" glyph-name="S" horiz-adv-x="358" d="M94 -10T60 8T25 49Q25 62 30 78T46 107Q85 72 149 72Q248 72 248 174Q248 210 235 238T189 306L89 423Q55 464 41 497T26 567Q26 632 71 671T198 710Q265 710 297 697T329 660Q329 635 309 614Q298 623
271 630T211 638Q166 638 140 620T113 569Q113 543 124 522T159 470L268 347Q306 302 320 264T335 178Q335 93 294 42T157 -10Q94 -10 60 8Z" />
<glyph unicode="T" glyph-name="T" horiz-adv-x="373" d="M365 700V641Q365 631 361 628T348 624H225V16Q225 7 221 4T197 1T144 0V624H8V684Q8 700 25 700H365Z" />
<glyph unicode="U" glyph-name="U" horiz-adv-x="437" d="M148 -10T109 18T57 91T44 205V683Q44 692 47 695T71 699T127 700V202Q127 133 146 99T224 65Q249 65 274 70T312 82V683Q312 692 316 695T340 699T394 700V26Q373 12 326 1T224 -10Q148 -10 109 18Z" />
<glyph unicode="V" glyph-name="V" horiz-adv-x="420" d="M176 -7T165 8T146 51Q122 153 73 377T7 676Q5 686 5 689Q5 695 9 697T24 700H90L174 312Q187 246 207 117L214 69Q232 215 250 312L325 676Q328 689 332 694T346 700H416L262 -3Q233 -7 194 -7Q176 -7 165 8Z" />
<glyph unicode="W" glyph-name="W" horiz-adv-x="654" d="M650 700L518 -3Q509 -4 492 -6T451 -8Q419 -8 408 49L356 276Q345 334 325 503Q306 341 296 277L241 -3Q208 -7 167 -7Q140 -7 126 54Q105 158 63 380T7 676Q6 680 6 687Q6 694 10 697T24 700H90L163
311Q178 220 193 88H198Q203 187 224 311L286 642Q289 656 292 661T307 666H364L435 311Q450 232 462 118L465 88H471Q482 220 496 311L561 676Q563 689 566 694T581 700H650Z" />
<glyph unicode="X" glyph-name="X" horiz-adv-x="424" d="M414 9T414 7Q414 0 403 0H315L261 135Q233 206 207 283Q178 198 151 135L97 10Q93 4 90 2T79 0H9L162 361L36 686Q33 694 37 696T66 699T131 700L172 586Q205 491 222 436Q248 520 271 586L310 687Q312
694 316 696T341 699T397 700L268 368L412 13Q414 9 414 7Z" />
<glyph unicode="Y" glyph-name="Y" horiz-adv-x="364" d="M225 16Q225 7 222 4T198 1T144 0V285L6 687Q4 694 8 696T35 699T97 700L137 563Q152 516 168 446T187 353Q189 375 206 445T238 563L273 685Q275 693 279 696T304 699T360 700L225 290V16Z" />
<glyph unicode="Z" glyph-name="Z" horiz-adv-x="385" d="M19 11T19 31Q19 50 27 67L267 628H80Q49 628 37 625V683Q37 691 41 695T54 700H352Q360 689 360 674Q360 656 352 637L108 72H302Q343 72 361 80V16Q361 0 345 0H32Q19 11 19 31Z" />
<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="386" d="M122 796Q122 808 125 812T140 819T184 821H377Q377 785 376 771T369 752T350 747H203V-123H376Q376 -161 374 -176T367 -195T349 -199H122V796Z" />
<glyph unicode="\" glyph-name="backslash" horiz-adv-x="329" d="M12 743L10 752Q10 761 25 763T91 765L317 -10L319 -18Q319 -26 304 -28T237 -30L12 743Z" />
<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="386" d="M9 -164T10 -150T17 -131T36 -126H183V746H10Q10 784 12 799T19 818T37 822H264V-175Q264 -187 261 -191T246 -198T202 -200H9Q9 -164 10 -150Z" />
<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="430" d="M69 208T59 220T48 249L220 398L366 270Q380 259 380 244Q380 230 369 219T341 206L212 294L110 218Q94 208 85 208Q69 208 59 220Z" />
<glyph unicode="_" glyph-name="underscore" horiz-adv-x="377" d="M14 -66T16 -52T30 -38H364Q364 -81 362 -95T347 -109H14Q14 -66 16 -52Z" />
<glyph unicode="`" glyph-name="grave" horiz-adv-x="269" d="M162 568T111 604T49 655Q53 677 63 696T86 716Q93 716 141 675T220 598Q219 595 215 584T204 563T189 553Q162 568 111 604Z" />
<glyph unicode="a" glyph-name="a" horiz-adv-x="354" d="M102 -10T66 20T29 142Q29 237 65 271T163 306Q210 306 236 293V372Q236 406 221 419T174 432Q138 432 101 426T41 409Q30 430 30 456Q30 476 41 483Q56 493 99 501T194 510Q259 510 288 482T317 388V335Q317
115 311 24Q287 9 250 0T166 -10Q102 -10 66 20ZM196 58T211 63T233 74Q236 108 236 236Q217 246 189 246Q153 246 133 225T113 144Q113 93 129 76T180 58Q196 58 211 63Z" />
<glyph unicode="b" glyph-name="b" horiz-adv-x="385" d="M84 -10T48 20V698Q48 717 54 724T75 733T128 735V475Q173 510 235 510Q297 510 327 465T358 313Q358 120 303 55T164 -10Q84 -10 48 20ZM212 61T240 110T268 296Q268 374 251 405T198 437Q156 437 128
409V75Q144 61 175 61Q212 61 240 110Z" />
<glyph unicode="c" glyph-name="c" horiz-adv-x="313" d="M128 -10T96 9T48 83T31 239Q31 400 81 455T210 510Q246 510 270 497T294 465Q294 442 285 420Q251 439 214 439Q170 439 142 399T114 238Q114 169 123 131T152 77T204 62Q227 62 248 68T284 85Q292 56
292 41Q292 20 260 5T180 -10Q128 -10 96 9Z" />
<glyph unicode="d" glyph-name="d" horiz-adv-x="381" d="M142 -10T108 7T52 77T31 232Q31 373 73 441T184 510Q230 510 256 490V698Q256 717 262 724T284 733T337 735V20Q273 -10 193 -10Q142 -10 108 7ZM234 62T256 77V427Q239 440 210 440Q120 440 120 241Q120
168 129 129T154 76T196 62Q234 62 256 77Z" />
<glyph unicode="e" glyph-name="e" horiz-adv-x="361" d="M267 68T321 100Q328 78 328 45Q328 22 288 6T190 -10Q139 -10 105 9T50 79T30 224Q30 341 54 404T117 488T207 510Q334 510 334 350Q334 270 323 220Q279 211 221 208T113 204Q115 150 125 121T155 80T207
68Q267 68 321 100ZM162 439T140 402T114 268Q213 268 251 280Q256 303 256 340Q255 396 243 417T198 439Q162 439 140 402Z" />
<glyph unicode="f" glyph-name="f" horiz-adv-x="254" d="M82 432H13Q13 459 14 475T18 496T33 500H82V561Q82 665 129 702T249 739Q294 739 318 728T342 698Q342 675 333 654Q304 666 262 666Q215 666 189 646T162 567V500H252Q252 473 251 457T247 436T235 432H162V16Q162
11 159 6T145 0H82V432Z" />
<glyph unicode="g" glyph-name="g" horiz-adv-x="394" d="M308 72T341 47T375 -34Q375 -104 326 -150T183 -197Q91 -197 57 -167T23 -88Q23 -54 44 -23T100 33Q37 50 38 87Q38 127 101 177Q39 217 39 327Q39 422 83 466T206 510Q229 510 256 502H375Q383 488 383
464Q383 433 355 433Q342 433 319 438Q357 400 357 329Q357 246 318 200T195 154Q169 154 150 158Q123 131 123 114Q123 102 148 97T242 82Q308 72 341 47ZM167 451T146 422T124 329Q124 271 139 244T200 216Q239 216 257 249T276 348Q276 402 258 426T203 451Q167
451 146 422ZM240 -123T266 -99T293 -45Q293 -22 283 -10T249 9T180 19L160 21Q137 3 122 -21T106 -69Q106 -96 124 -109T190 -123Q240 -123 266 -99Z" />
<glyph unicode="h" glyph-name="h" horiz-adv-x="380" d="M45 698Q45 717 51 724T72 733T125 735V471Q147 490 177 500T238 510Q299 510 320 479T342 378V16Q342 7 338 4T313 1T260 0V356Q260 394 248 414T201 435Q182 435 162 429T125 408V16Q125 7 122 4T99
1T45 0V698Z" />
<glyph unicode="i" glyph-name="i" horiz-adv-x="175" d="M47 463Q47 482 53 489T75 498T128 500V16Q128 7 125 4T101 1T47 0V463ZM300 570T300 628Q300 692 346 692Q368 692 377 679T386 634Q386 604 374 587T340 570Q300 570 300 628Z" />
<glyph unicode="j" glyph-name="j" horiz-adv-x="184" d="M-50 -196T-76 -182T-103 -143Q-103 -117 -91 -102Q-53 -122 -6 -122Q31 -122 42 -101T54 -24V463Q54 482 60 489T81 498T134 500V-36Q134 -111 106 -153T4 -196Q-50 -196 -76 -182ZM306 570T306 628Q306
692 352 692Q374 692 383 679T392 634Q392 604 380 587T346 570Q306 570 306 628Z" />
<glyph unicode="k" glyph-name="k" horiz-adv-x="376" d="M46 698Q46 717 52 724T74 733T127 735V464Q153 485 187 497T253 510Q338 510 338 424Q338 369 312 331T254 269Q293 252 320 209T354 100Q355 90 355 67Q355 43 352 16Q351 7 347 4T321 1T261 0Q265 29
265 62Q265 93 260 123Q251 175 231 201T183 227Q176 227 172 226Q161 224 146 217T127 207V16Q127 7 124 4T101 1T46 0V698ZM249 314T249 397Q249 437 212 437Q166 437 127 389V265Q249 314 249 397Z" />
<glyph unicode="l" glyph-name="l" horiz-adv-x="173" d="M46 698Q46 717 52 724T74 733T127 735V16Q127 7 123 4T100 1T46 0V698Z" />
<glyph unicode="m" glyph-name="m" horiz-adv-x="564" d="M458 510T482 494T515 449T523 369V16Q523 7 519 4T495 1T442 0V370Q442 409 433 424T393 439Q356 439 325 420V16Q325 7 322 4T299 1T246 0H245V372Q245 400 242 413T229 433T195 440Q159 440 127 422V16Q127
7 123 4T99 1T46 0V477Q119 510 197 510Q259 510 288 479Q313 493 346 501T410 510Q458 510 482 494Z" />
<glyph unicode="n" glyph-name="n" horiz-adv-x="383" d="M45 476Q76 490 121 500T204 510Q282 510 313 480T344 376V16Q344 7 340 4T316 1T261 0V352Q261 402 249 421T201 440Q183 440 162 436T126 422V16Q126 7 122 4T98 1T45 0V476Z" />
<glyph unicode="o" glyph-name="o" horiz-adv-x="376" d="M128 -10T95 9T45 84T27 250Q27 510 194 510Q249 510 282 488T332 409T349 252Q349 116 308 53T184 -10Q128 -10 95 9ZM222 58T241 100T261 252Q261 330 254 371T231 427T191 442Q154 442 135 400T115
248Q115 168 123 127T146 72T186 58Q222 58 241 100Z" />
<glyph unicode="p" glyph-name="p" horiz-adv-x="382" d="M63 -197T55 -190T46 -162V470Q109 510 192 510Q272 510 313 464T355 302Q355 121 313 56T206 -10Q180 -10 160 -2T127 18V-191Q108 -197 85 -197Q63 -197 55 -190ZM266 62T266 293Q266 352 258 384T233
428T188 440Q154 440 127 421V95Q147 62 181 62Q266 62 266 293Z" />
<glyph unicode="q" glyph-name="q" horiz-adv-x="387" d="M276 -198T261 -195V34Q231 -10 165 -10Q107 -10 69 38T30 218Q30 373 86 441T235 510Q269 510 294 503T342 479V-163Q342 -186 334 -191T294 -198Q276 -198 261 -195ZM215 60T233 73T261 112V426Q243
440 215 440Q169 440 145 389T121 220Q121 127 141 94T195 61Q215 60 233 73Z" />
<glyph unicode="r" glyph-name="r" horiz-adv-x="263" d="M45 465Q109 510 181 510Q218 510 234 500T251 468Q251 443 242 421Q221 433 194 433Q155 433 128 410L127 16Q127 7 123 4T99 1T45 0V465Z" />
<glyph unicode="s" glyph-name="s" horiz-adv-x="346" d="M97 -10T64 3T30 40Q30 64 45 87Q86 63 144 63Q183 63 204 78T226 124Q226 146 217 165T186 203L89 286Q31 333 31 392Q31 447 72 478T195 510Q263 510 291 492T320 454Q320 445 315 434T303 413Q259 440
204 440Q168 440 147 427T125 391Q125 376 133 363T165 329L258 254Q291 222 304 194T318 129Q318 63 274 27T152 -10Q97 -10 64 3Z" />
<glyph unicode="t" glyph-name="t" horiz-adv-x="292" d="M141 -10T121 7T94 56T87 139V431H19Q19 458 20 474T24 495T36 500H87V652Q87 666 93 671T114 678T167 680V500H271Q271 473 270 456T266 435T254 431H167V139Q167 98 173 79T204 59Q220 59 232 62T262
74Q268 54 268 34Q268 10 243 0T182 -10Q141 -10 121 7Z" />
<glyph unicode="u" glyph-name="u" horiz-adv-x="389" d="M135 -10T103 8T58 61T45 156V484Q45 493 48 496T72 499T128 500V149Q128 98 141 79T196 60Q236 60 263 79V484Q263 493 267 496T290 499T344 500V26Q314 10 274 0T194 -10Q135 -10 103 8Z" />
<glyph unicode="v" glyph-name="v" horiz-adv-x="344" d="M143 -6T135 6T121 43L19 475Q17 485 17 487Q17 494 23 496T51 499T104 500L136 339Q150 274 161 193T176 86H178Q181 111 192 192T216 340L243 482Q245 492 249 495T273 499T328 500L213 -3Q198 -6 156
-6Q143 -6 135 6Z" />
<glyph unicode="w" glyph-name="w" horiz-adv-x="541" d="M448 492T452 495T476 499T526 500Q510 421 466 209T418 -3Q415 -4 401 -5T366 -6Q354 -6 342 7T324 46L311 114Q288 220 274 363Q256 205 237 113L214 -3Q207 -4 188 -5T147 -6Q123 -6 113 43Q95 120
61 276T16 483Q14 492 19 495T46 499T103 500L134 337Q146 267 156 191T169 93H175Q194 229 203 278L235 469Q237 480 241 483T261 486H314L353 276Q364 228 373 170T384 93H389Q393 140 402 210T421 337L446 482Q448 492 452 495Z" />
<glyph unicode="x" glyph-name="x" horiz-adv-x="411" d="M395 9T395 8Q395 3 384 2T337 0H302L265 66Q243 107 199 201Q164 121 136 65L107 16Q103 8 96 5T68 1T15 0L157 260L35 487Q32 494 35 496T60 499T120 500L157 431Q185 379 211 317Q244 390 266 432L297
486Q300 494 305 496T330 499T386 500L258 267L391 19Q395 9 395 8Z" />
<glyph unicode="y" glyph-name="y" horiz-adv-x="357" d="M-4 -193T-4 -154Q-4 -142 -1 -130T8 -109Q18 -116 35 -120T71 -124Q97 -124 115 -100T144 -16L24 478Q22 486 22 489Q22 497 35 498T102 500L157 260Q167 211 174 156T184 83Q186 99 192 154T208 261L253
477Q255 490 259 494T279 499T340 500L217 -27Q202 -91 184 -127T140 -178T77 -193Q-4 -193 -4 -154Z" />
<glyph unicode="z" glyph-name="z" horiz-adv-x="335" d="M33 1T30 5T24 19T21 40Q21 58 28 70L223 432H120Q63 432 28 427Q25 444 25 465Q25 483 31 491T51 500H306Q307 499 310 493T314 475Q314 456 305 436L115 75H204Q270 75 310 85Q312 77 312 50Q312 23
306 12T280 0H34Q33 1 30 5Z" />
<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="277" d="M154 -150T122 -117T89 -15Q89 26 96 80Q97 89 100 120T103 182Q103 220 90 237T48 260Q41 275 41 293Q41 321 58 333Q74 343 83 352T97 378T103 427Q103 458 100 492T96 536Q89 590 89 626Q89
686 130 714T244 744Q260 722 260 694Q260 683 256 676T245 666Q208 663 190 644T171 585Q171 556 176 511Q182 445 182 403Q182 357 169 335T128 300Q155 289 168 268T182 205Q182 164 176 100Q171 53 171 22Q171 -15 180 -35T206 -63T253 -76Q255 -102 255 -106Q255
-126 248 -138T227 -150Q154 -150 122 -117Z" />
<glyph unicode="|" glyph-name="bar" horiz-adv-x="324" d="M122 793Q122 805 126 809T145 814T203 815V-180Q203 -191 199 -194T175 -199T122 -200V793Z" />
<glyph unicode="}" glyph-name="braceright" horiz-adv-x="277" d="M18 -128T18 -100Q18 -75 33 -72Q106 -66 106 8Q106 28 102 84Q96 148 96 191Q96 237 109 259T149 294Q122 305 109 326T96 389Q96 430 102 494Q106 550 106 573Q106 610 97 629T71 657T25 670Q21
686 21 701Q21 720 29 732T50 744Q123 744 155 711T188 609Q188 568 181 514Q180 505 177 474T174 412Q174 374 187 357T229 334Q236 317 236 301Q236 272 218 261Q201 250 193 242T180 216T174 167Q174 128 182 58Q188 -6 188 -32Q188 -92 146 -121T33 -150Q18
-128 18 -100Z" />
<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="400" d="M237 212T221 218T185 237Q169 247 158 251T132 256Q115 256 102 250T72 232Q58 221 46 218Q32 217 22 230T11 266Q26 289 61 309T140 329Q164 329 178 324T212 306Q228 296 240 291T270 286Q309
286 341 320Q347 325 357 325Q370 325 380 311T391 277Q373 252 340 232T263 212Q237 212 221 218Z" />
<glyph unicode="&#xa0;" glyph-name="uni00A0" horiz-adv-x="158" />
<glyph unicode="&#xa1;" glyph-name="exclamdown" horiz-adv-x="195" d="M46 394T46 451Q46 476 61 492T102 508Q132 508 144 494T157 451Q157 427 142 411T102 394Q46 394 46 451ZM61 256Q62 274 69 281T91 291T141 293L155 -174Q155 -185 147 -190T117 -196T45
-197L61 256Z" />
<glyph unicode="&#xa2;" glyph-name="cent" horiz-adv-x="418" d="M277 64T299 71T335 88Q343 68 343 37Q343 23 319 9T263 -9V-102Q263 -121 247 -127T190 -133V-7Q154 -1 131 20T96 91T83 228Q83 471 213 504V592Q213 611 230 618T286 626V508Q310 503 327 494T345
475Q345 437 337 417Q305 435 269 435Q239 435 217 421T179 362T164 231Q164 156 174 121T202 75T257 64Q277 64 299 71Z" />
<glyph unicode="&#xa3;" glyph-name="sterling" horiz-adv-x="366" d="M322 74Q329 54 329 37Q329 0 277 0H89Q80 121 78 277H15Q15 320 17 333T31 347H78Q82 480 122 537T238 595Q280 595 309 582T338 542Q338 530 335 518T327 493Q294 514 256 514Q210 514 185
479T158 347H288Q288 305 286 291T272 277H158Q160 146 165 80L322 74Z" />
<glyph unicode="&#xa4;" glyph-name="currency" horiz-adv-x="571" d="M560 49Q535 24 525 15T507 6Q504 6 498 10L417 91Q371 52 286 52Q201 52 154 90L62 -2Q39 21 30 32T20 51Q20 56 24 60L110 146Q87 198 87 276Q87 350 107 401L12 496Q37 521 47 530T65 539Q69
539 73 535L147 461Q198 506 291 506Q380 506 427 463L510 546Q534 522 543 512T552 493Q552 489 548 485L466 403Q484 357 484 286Q484 202 460 148L560 49ZM348 121T377 162T407 288Q407 365 380 402T295 439Q230 439 199 398T167 271Q167 195 196 158T288 121Q348
121 377 162Z" />
<glyph unicode="&#xa5;" glyph-name="yen" horiz-adv-x="418" d="M249 243H379Q379 205 373 191T347 176H249V16Q249 7 246 4T223 1T169 0V176H38Q38 215 44 229T70 243H169V284L149 341H38Q38 380 44 394T70 408H126L30 687Q28 694 32 696T59 699T122 700L161
563Q179 505 193 449T209 372Q211 392 226 451T259 563L297 685Q300 693 304 696T329 699T384 700L288 408H378Q378 370 372 356T347 341H266L249 290V243Z" />
<glyph unicode="&#xa6;" glyph-name="brokenbar" horiz-adv-x="227" d="M90 326T73 330V711Q73 729 82 736T115 743Q135 743 153 737V354Q153 337 146 332T112 326Q90 326 73 330ZM89 -198T73 -193V192Q73 210 82 217T115 225Q135 225 153 219V-169Q153 -187 146
-192T112 -198Q89 -198 73 -193Z" />
<glyph unicode="&#xa7;" glyph-name="section" horiz-adv-x="348" d="M264 201Q284 174 292 155T301 112Q301 58 259 27T150 -4Q106 -4 78 9T43 39Q40 44 40 55Q40 83 56 105Q90 81 137 81Q171 81 190 94T209 128Q209 142 202 154T179 185Q179 185 141 223Q94
268 72 296Q53 320 45 340T36 388Q36 415 49 442T91 489L83 499Q63 524 55 543T46 587Q46 641 88 672T198 703Q242 703 269 690T304 661Q307 652 307 644Q307 617 291 595Q259 618 209 618Q175 618 157 605T138 571Q138 557 144 546T167 515Q181 500 202 480Q221
462 242 441T275 404Q295 380 303 360T311 312Q311 286 297 259T255 212L264 201ZM151 300T171 284T196 264Q214 271 225 287T236 318Q236 335 229 350T207 384Q196 399 176 415T151 435Q133 429 122 413T111 382Q111 363 118 348T140 315Q151 300 171 284Z" />
<glyph unicode="&#xa8;" glyph-name="dieresis" horiz-adv-x="269" d="M53 573T44 586T34 632Q34 659 45 674T78 689Q100 689 108 677T117 634Q117 604 106 588T73 572Q53 573 44 586ZM173 573T163 585T153 628Q153 689 197 689Q219 689 227 677T236 634Q234 572
192 572Q173 573 163 585Z" />
<glyph unicode="&#xa9;" glyph-name="copyright" horiz-adv-x="471" d="M133 320T85 371T36 541Q36 652 89 706T242 760Q343 760 389 711T436 543Q436 435 384 378T234 320Q133 320 85 371ZM296 378T335 418T375 544Q375 628 342 666T241 705Q96 705 96 541Q96
452 129 415T232 378Q296 378 335 418ZM211 416T193 424T166 456T157 531Q157 613 183 640T249 668Q264 668 279 663T294 652Q294 644 288 620Q268 628 254 628Q231 628 218 609T204 529Q204 497 208 482T222 462T247 457Q266 457 286 467Q289 461 291 452T293
437Q293 430 277 423T243 416Q211 416 193 424Z" />
<glyph unicode="&#xaa;" glyph-name="ordfeminine" horiz-adv-x="323" d="M100 288T71 312T41 411Q41 478 69 506T150 534Q182 534 214 524V582Q214 615 198 627T152 639Q105 639 57 617Q47 630 47 652Q47 668 53 675Q85 710 176 710Q225 710 253 685T282 608V317Q259
306 224 297T154 288Q100 288 71 312ZM179 346T193 349T214 358V468Q206 472 194 474T172 476Q138 476 122 464T105 409Q105 373 120 360T165 346Q179 346 193 349Z" />
<glyph unicode="&#xab;" glyph-name="guillemotleft" horiz-adv-x="416" d="M156 16T120 70T51 181T18 253Q18 268 50 322T118 430T164 500Q178 500 188 491T205 472T212 459Q212 442 186 397T132 309T94 253Q103 240 132 198T187 109T214 47Q213 43 207 32T191
11T167 0Q156 16 120 70ZM326 38T291 86T223 185T190 251Q190 265 222 315T288 414T334 477Q347 477 357 469T374 451T381 439Q381 423 356 381T303 301T267 251Q276 240 303 203T357 125T383 69Q382 66 376 55T360 34T337 24Q326 38 291 86Z" />
<glyph unicode="&#xac;" glyph-name="logicalnot" horiz-adv-x="400" d="M358 111Q342 105 321 105Q304 105 293 111T282 131V232H40Q34 252 34 270Q34 287 40 297T60 308H358V111Z" />
<glyph unicode="&#xad;" glyph-name="uni00AD" horiz-adv-x="278" d="M37 290T39 303T54 317H241Q241 275 239 261T225 247H37Q37 290 39 303Z" />
<glyph unicode="&#xae;" glyph-name="registered" horiz-adv-x="471" d="M343 760T389 711T436 543Q436 435 384 378T234 320Q133 320 85 371T36 541Q36 652 89 706T242 760Q343 760 389 711ZM296 378T335 418T375 544Q375 628 342 666T241 705Q96 705 96 541Q96
452 129 415T232 378Q296 378 335 418ZM288 517T300 492T315 426Q315 420 312 418T299 416Q281 416 274 417Q268 491 239 518Q235 517 227 517H214V425Q214 419 208 418T176 417V665Q176 666 177 668T183 670H227Q308 670 308 598Q308 550 274 529Q288 517 300
492ZM219 551T230 551Q249 551 258 562T268 600Q268 618 260 627T232 637H214V552Q219 551 230 551Z" />
<glyph unicode="&#xaf;" glyph-name="overscore" horiz-adv-x="269" d="M1 601T1 624Q1 642 10 652T34 663H261Q268 646 268 629Q268 611 260 599T238 587H6Q1 601 1 624Z" />
<glyph unicode="&#xb0;" glyph-name="degree" horiz-adv-x="358" d="M129 553T107 573T84 649Q84 746 184 746Q233 746 254 725T276 650Q276 602 251 578T177 553Q129 553 107 573ZM223 604T223 650Q223 674 214 684T184 694Q161 694 150 684T138 648Q138 604
179 604Q223 604 223 650Z" />
<glyph unicode="&#xb1;" glyph-name="plusminus" horiz-adv-x="419" d="M385 359Q385 317 383 303T369 289H246V165Q246 154 232 152T175 149V289H35Q35 332 37 345T52 359H175V483Q175 494 189 496T246 499V359H385ZM34 58T36 71T51 85H384Q384 43 382 29T368
15H34Q34 58 36 71Z" />
<glyph unicode="&#xb2;" glyph-name="uni00B2" d="M41 301T41 315Q41 344 53 357Q77 385 138 444Q188 491 210 518T232 576Q232 600 219 614T168 628Q139 628 116 618T66 590Q57 606 54 616T51 639Q51 657 74 673T134 700T205 710Q274 710 302 683T330 604Q330
556 300 515T212 416Q170 373 162 365H339Q344 342 344 330Q344 289 318 289H47Q41 301 41 315Z" />
<glyph unicode="&#xb3;" glyph-name="uni00B3" d="M304 503T322 478T340 423Q340 352 292 316T165 279Q126 279 98 286T57 305Q45 314 45 335Q45 347 50 359T64 379Q103 353 161 353Q205 353 231 369T257 416Q257 438 242 452T199 470Q181 473 128 473Q126 476
123 489T119 510Q119 535 144 535Q171 535 197 532Q218 548 227 562T236 594Q236 612 221 625T171 638Q113 638 67 605Q51 622 51 645Q51 663 61 671Q79 688 116 699T204 710Q266 710 295 686T325 620Q325 592 312 565T273 516Q304 503 322 478Z" />
<glyph unicode="&#xb4;" glyph-name="acute" horiz-adv-x="271" d="M73 560T66 570T55 591T50 605Q82 641 129 681T184 722Q197 722 207 703T221 661Q209 648 158 611T81 560Q73 560 66 570Z" />
<glyph unicode="&#xb5;" glyph-name="uni00B5" horiz-adv-x="395" d="M70 -195T45 -190V470Q45 488 54 496T86 505Q110 505 125 500V131Q125 98 143 82T195 66Q237 66 269 81V470Q269 488 277 496T308 505Q334 505 349 500V24Q317 9 277 0T194 -10Q146 -10 125
15V-163Q125 -195 80 -195Q70 -195 45 -190Z" />
<glyph unicode="&#xb6;" glyph-name="paragraph" horiz-adv-x="541" d="M289 -3T271 3V205Q257 198 235 194T191 190Q121 190 78 242T34 420Q34 569 86 639T231 710Q298 710 352 682V26Q352 -3 312 -3Q289 -3 271 3ZM430 -3T414 2V658Q414 676 423 683T456 690Q477
690 495 684V26Q495 8 487 3T453 -3Q430 -3 414 2ZM226 255T243 258T271 269V630Q253 641 220 641Q169 641 143 588T116 428Q116 331 143 294T212 255Q226 255 243 258Z" />
<glyph unicode="&#xb7;" glyph-name="middot" horiz-adv-x="220" d="M79 212T66 226T53 269Q53 293 68 309T109 326Q165 326 165 269Q165 244 150 228T109 212Q79 212 66 226Z" />
<glyph unicode="&#xb8;" glyph-name="cedilla" horiz-adv-x="269" d="M177 -58T191 -74T206 -122Q206 -160 184 -183T126 -206Q107 -206 89 -200T70 -193Q71 -188 75 -172T83 -152Q86 -149 101 -156T128 -163Q159 -163 159 -129Q159 -95 129 -95Q113 -95 102 -97T88
-101L107 2H152L140 -59Q141 -58 157 -58Q177 -58 191 -74Z" />
<glyph unicode="&#xb9;" glyph-name="uni00B9" horiz-adv-x="382" d="M45 308T45 323Q45 345 50 355T72 365H166V622L58 600Q48 616 48 638Q48 666 74 676Q109 688 157 699T223 710Q241 710 247 707V365H334Q338 339 338 329Q338 307 333 298T313 289H49Q45 308 45 323Z" />
<glyph unicode="&#xba;" glyph-name="ordmasculine" horiz-adv-x="338" d="M121 289T93 307T50 372T35 499Q35 607 71 658T174 710Q220 710 247 692T289 628T303 501Q303 394 268 342T165 289Q121 289 93 307ZM200 356T217 389T235 499Q235 580 221 609T175 639Q139
639 121 606T103 494Q103 414 118 385T166 356Q200 356 217 389Z" />
<glyph unicode="&#xbb;" glyph-name="guillemotright" horiz-adv-x="414" d="M244 1T233 6T211 21T200 46Q200 62 227 108T283 197T321 253Q312 266 284 308T229 396T203 459Q203 471 213 480T235 494T251 500Q262 484 297 431T364 323T396 253Q396 237 363 181T295
71T248 0Q244 1 233 6ZM73 23T63 28T43 43T33 68Q33 84 59 124T112 202T149 250Q152 250 126 284Q84 343 60 382T35 439Q35 451 45 460T65 474T79 480Q90 465 125 416T192 316T224 250Q224 234 191 184T123 85T76 22Q73 23 63 28Z" />
<glyph unicode="&#xbc;" glyph-name="onequarter" horiz-adv-x="959" d="M41 307T41 323Q41 345 46 355T68 365H162V622L54 600Q44 616 44 638Q44 665 71 676Q105 688 153 699T219 710Q237 710 244 707V365H330Q334 348 334 329Q334 307 329 298T310 289H46Q41
307 41 323ZM324 -10T309 -2T281 19L617 691Q625 710 645 710Q658 710 673 703T700 682L361 5Q355 -10 337 -10Q324 -10 309 -2ZM808 -6T792 -2V70H621Q607 85 607 110Q607 125 614 143Q632 202 677 275T764 390Q780 409 796 415T834 421Q853 421 868 416V147H927Q934
130 934 109Q934 91 927 81T909 70H868V19Q868 -6 825 -6Q808 -6 792 -2ZM795 141L799 329Q766 303 731 247T682 141H795Z" />
<glyph unicode="&#xbd;" glyph-name="onehalf" horiz-adv-x="947" d="M41 307T41 323Q41 345 46 355T68 365H162V622L54 600Q44 616 44 638Q44 665 71 676Q105 688 153 699T219 710Q237 710 244 707V365H330Q334 348 334 329Q334 307 329 298T310 289H46Q41 307
41 323ZM324 -10T309 -2T281 19L617 691Q625 710 645 710Q658 710 673 703T700 682L361 5Q355 -10 337 -10Q324 -10 309 -2ZM607 12T607 26Q607 55 619 68Q643 96 704 155Q754 202 776 229T798 287Q798 311 785 325T734 339Q706 339 682 329T632 301Q623 317 621
327T618 350Q618 368 641 384T700 411T771 421Q840 421 868 394T896 315Q896 281 879 249T839 190T776 125Q735 84 728 76H905Q910 53 910 41Q910 0 884 0H613Q607 12 607 26Z" />
<glyph unicode="&#xbe;" glyph-name="threequarters" horiz-adv-x="961" d="M300 503T318 478T336 423Q336 352 288 316T161 279Q122 279 95 286T54 305Q41 314 41 335Q41 347 46 359T61 379Q98 353 158 353Q202 353 227 369T253 416Q253 438 238 452T196 470Q177
473 124 473Q122 476 119 489T115 510Q115 535 140 535Q169 535 194 532Q215 547 223 561T232 594Q232 612 217 625T168 638Q109 638 64 605Q48 622 48 646Q48 664 57 671Q75 688 112 699T201 710Q262 710 291 686T321 620Q321 592 308 565T269 516Q300 503 318
478ZM326 -10T311 -2T283 19L619 691Q627 710 647 710Q660 710 675 703T702 682L363 5Q357 -10 339 -10Q326 -10 311 -2ZM810 -6T794 -2V70H623Q609 85 609 110Q609 125 616 143Q634 202 679 275T766 390Q782 409 798 415T836 421Q855 421 870 416V147H929Q936
130 936 109Q936 91 929 81T911 70H870V19Q870 -6 827 -6Q810 -6 794 -2ZM797 141L801 329Q768 303 733 247T684 141H797Z" />
<glyph unicode="&#xbf;" glyph-name="questiondown" horiz-adv-x="306" d="M138 392T125 407T111 450Q111 474 126 490T167 506Q197 506 210 492T223 450Q223 426 208 409T167 392Q138 392 125 407ZM89 -195T52 -160T14 -56Q14 3 33 43T89 131Q117 170 125 184Q137
205 137 232Q137 242 132 272Q130 281 130 288T131 298Q141 308 176 308Q188 308 204 306Q205 304 208 295T215 270T219 236Q219 198 201 163Q186 135 156 93Q127 49 114 23T101 -37Q101 -114 182 -114Q228 -114 266 -89Q278 -119 278 -153Q278 -170 239 -182T153
-195Q89 -195 52 -160Z" />
<glyph unicode="&#xc0;" glyph-name="Agrave" horiz-adv-x="437" d="M433 6T426 2T396 -2Q369 -2 348 0L306 178H132L93 14Q90 5 84 2T55 -2Q34 -2 5 1L184 689Q187 703 214 703Q237 703 252 700L431 15Q433 6 426 2ZM288 251L254 395Q225 517 219 588Q208 499
183 395L149 251H288ZM253 768T202 804T140 855Q144 877 154 896T177 916Q184 916 232 875T311 798Q310 795 306 784T295 763T280 753Q253 768 202 804Z" />
<glyph unicode="&#xc1;" glyph-name="Aacute" horiz-adv-x="437" d="M433 6T426 2T396 -2Q369 -2 348 0L306 178H132L93 14Q90 5 84 2T55 -2Q34 -2 5 1L184 689Q187 703 214 703Q237 703 252 700L431 15Q433 6 426 2ZM288 251L254 395Q225 517 219 588Q208 499
183 395L149 251H288ZM163 760T156 770T145 791T140 805Q172 841 219 881T274 922Q287 922 297 903T311 861Q299 848 248 811T171 760Q163 760 156 770Z" />
<glyph unicode="&#xc2;" glyph-name="Acircumflex" horiz-adv-x="437" d="M433 6T426 2T396 -2Q369 -2 348 0L306 178H132L93 14Q90 5 84 2T55 -2Q34 -2 5 1L184 689Q187 703 214 703Q237 703 252 700L431 15Q433 6 426 2ZM288 251L254 395Q225 517 219 588Q208
499 183 395L149 251H288ZM279 770T255 796T222 838Q218 832 203 814T172 779T147 762Q111 762 92 785L206 908Q214 911 223 911Q237 911 248 899Q255 892 278 867T323 817T345 784Q345 774 328 768T288 761Q279 770 255 796Z" />
<glyph unicode="&#xc3;" glyph-name="Atilde" horiz-adv-x="437" d="M433 6T426 2T396 -2Q369 -2 348 0L306 178H132L93 14Q90 5 84 2T55 -2Q34 -2 5 1L184 689Q187 703 214 703Q237 703 252 700L431 15Q433 6 426 2ZM288 251L254 395Q225 517 219 588Q208 499
183 395L149 251H288ZM238 763T227 770T205 790Q195 801 188 806T170 811Q156 811 147 804T127 785T111 772Q101 772 93 781T79 799T72 812Q96 851 125 869T185 887Q200 887 209 881T230 863Q241 851 250 845T272 839Q292 839 302 846T322 866T337 878Q345 878
351 868T361 847T366 833Q362 824 347 808T309 777T258 763Q238 763 227 770Z" />
<glyph unicode="&#xc4;" glyph-name="Adieresis" horiz-adv-x="437" d="M433 6T426 2T396 -2Q369 -2 348 0L306 178H132L93 14Q90 5 84 2T55 -2Q34 -2 5 1L184 689Q187 703 214 703Q237 703 252 700L431 15Q433 6 426 2ZM288 251L254 395Q225 517 219 588Q208
499 183 395L149 251H288ZM137 773T128 786T118 832Q118 859 129 874T162 889Q184 889 192 877T201 834Q201 804 190 788T157 772Q137 773 128 786ZM257 773T247 785T237 828Q237 889 281 889Q303 889 311 877T320 834Q318 772 276 772Q257 773 247 785Z" />
<glyph unicode="&#xc5;" glyph-name="Aring" horiz-adv-x="437" d="M433 6T426 2T396 -2Q369 -2 348 0L306 178H132L93 14Q90 5 84 2T55 -2Q34 -2 5 1L184 689Q187 703 214 703Q237 703 252 700L431 15Q433 6 426 2ZM288 251L254 395Q225 517 219 588Q208 499
183 395L149 251H288ZM169 743T146 764T123 839Q123 888 149 912T223 937Q271 937 293 916T315 840Q315 792 290 768T216 743Q169 743 146 764ZM259 797T259 840Q259 862 250 871T223 881Q180 881 180 838Q180 818 189 808T218 797Q259 797 259 840Z" />
<glyph unicode="&#xc6;" glyph-name="AE" horiz-adv-x="615" d="M420 73H592Q592 44 592 26T588 4T576 0H340V178H174L105 14Q102 5 95 2T68 -2Q45 -2 17 1L311 686Q317 700 337 700H596Q596 672 596 654T592 632T581 627H420V418H571Q571 391 571 373T567 350T556
344H420V73ZM340 251V615Q304 490 264 392L205 251H340Z" />
<glyph unicode="&#xc7;" glyph-name="Ccedilla" horiz-adv-x="341" d="M243 79T268 88T308 111Q320 85 320 62Q320 35 293 15T220 -9L210 -59Q211 -58 227 -58Q247 -58 261 -74T276 -122Q276 -160 254 -183T196 -206Q177 -206 159 -200T140 -193Q141 -188 145
-172T153 -152Q156 -149 171 -156T198 -163Q229 -163 229 -129Q229 -95 199 -95Q183 -95 172 -97T158 -101L175 -9Q128 -6 97 21T48 120T30 321Q30 480 59 566T130 681T227 710Q277 710 299 694T321 655Q321 628 308 606Q277 631 243 631Q206 631 178 608T133 517T115
325Q115 227 127 173T161 99T215 79Q243 79 268 88Z" />
<glyph unicode="&#xc8;" glyph-name="Egrave" horiz-adv-x="320" d="M125 73H297Q297 44 297 26T293 4T281 0H45V684Q45 688 48 694T61 700H301Q301 672 301 654T297 632T286 627H125V418H276Q276 391 276 373T272 350T261 344H125V73ZM204 768T153 804T91 855Q95
877 105 896T128 916Q135 916 183 875T262 798Q261 795 257 784T246 763T231 753Q204 768 153 804Z" />
<glyph unicode="&#xc9;" glyph-name="Eacute" horiz-adv-x="320" d="M125 73H297Q297 44 297 26T293 4T281 0H45V684Q45 688 48 694T61 700H301Q301 672 301 654T297 632T286 627H125V418H276Q276 391 276 373T272 350T261 344H125V73ZM114 760T107 770T96 791T91
805Q123 841 170 881T225 922Q238 922 248 903T262 861Q250 848 199 811T122 760Q114 760 107 770Z" />
<glyph unicode="&#xca;" glyph-name="Ecircumflex" horiz-adv-x="320" d="M125 73H297Q297 44 297 26T293 4T281 0H45V684Q45 688 48 694T61 700H301Q301 672 301 654T297 632T286 627H125V418H276Q276 391 276 373T272 350T261 344H125V73ZM230 770T206 796T173
838Q169 832 154 814T123 779T98 762Q62 762 43 785L157 908Q165 911 174 911Q188 911 199 899Q206 892 229 867T274 817T296 784Q296 774 279 768T239 761Q230 770 206 796Z" />
<glyph unicode="&#xcb;" glyph-name="Edieresis" horiz-adv-x="320" d="M125 73H297Q297 44 297 26T293 4T281 0H45V684Q45 688 48 694T61 700H301Q301 672 301 654T297 632T286 627H125V418H276Q276 391 276 373T272 350T261 344H125V73ZM88 773T79 786T69 832Q69
859 80 874T113 889Q135 889 143 877T152 834Q152 804 141 788T108 772Q88 773 79 786ZM208 773T198 785T188 828Q188 889 232 889Q254 889 262 877T271 834Q269 772 227 772Q208 773 198 785Z" />
<glyph unicode="&#xcc;" glyph-name="Igrave" horiz-adv-x="169" d="M44 663Q44 683 48 690T66 698T126 700V16Q126 7 122 4T98 1T44 0V663ZM119 768T68 804T6 855Q10 877 20 896T43 916Q50 916 98 875T177 798Q176 795 172 784T161 763T146 753Q119 768 68 804Z" />
<glyph unicode="&#xcd;" glyph-name="Iacute" horiz-adv-x="169" d="M44 663Q44 683 48 690T66 698T126 700V16Q126 7 122 4T98 1T44 0V663ZM29 760T22 770T11 791T6 805Q38 841 85 881T140 922Q153 922 163 903T177 861Q165 848 114 811T37 760Q29 760 22 770Z" />
<glyph unicode="&#xce;" glyph-name="Icircumflex" horiz-adv-x="169" d="M44 663Q44 683 48 690T66 698T126 700V16Q126 7 122 4T98 1T44 0V663ZM145 770T121 796T88 838Q84 832 69 814T38 779T13 762Q-23 762 -42 785L72 908Q80 911 89 911Q103 911 114 899Q121
892 144 867T189 817T211 784Q211 774 194 768T154 761Q145 770 121 796Z" />
<glyph unicode="&#xcf;" glyph-name="Idieresis" horiz-adv-x="169" d="M44 663Q44 683 48 690T66 698T126 700V16Q126 7 122 4T98 1T44 0V663ZM3 773T-6 786T-16 832Q-16 859 -5 874T28 889Q50 889 58 877T67 834Q67 804 56 788T23 772Q3 773 -6 786ZM123 773T113
785T103 828Q103 889 147 889Q169 889 177 877T186 834Q184 772 142 772Q123 773 113 785Z" />
<glyph unicode="&#xd0;" glyph-name="Eth" horiz-adv-x="388" d="M237 700T279 672T342 577T364 394Q364 247 342 160T276 37T169 0H44V331H5Q5 374 7 387T21 401H44V681Q44 691 50 695T71 700H169Q237 700 279 672ZM201 77T223 100T259 193T273 394Q273 485 262
535T229 606T171 626H125V401H205Q205 359 203 345T188 331H125V77H171Q201 77 223 100Z" />
<glyph unicode="&#xd1;" glyph-name="Ntilde" horiz-adv-x="444" d="M320 693T324 696T348 699T401 700V16Q401 0 384 0H324L209 275Q185 339 114 560Q118 517 121 416T124 259V16Q124 7 121 4T97 1T44 0V684Q44 700 60 700H121L234 430Q247 395 308 211Q312 199
330 146V149Q325 188 323 290T320 448V684Q320 693 324 696ZM241 763T230 770T208 790Q198 801 191 806T173 811Q159 811 150 804T130 785T114 772Q104 772 96 781T82 799T75 812Q99 851 128 869T188 887Q203 887 212 881T233 863Q244 851 253 845T275 839Q295
839 305 846T325 866T340 878Q348 878 354 868T364 847T369 833Q365 824 350 808T312 777T261 763Q241 763 230 770Z" />
<glyph unicode="&#xd2;" glyph-name="Ograve" horiz-adv-x="429" d="M143 -10T105 21T48 131T30 354Q30 486 50 564T113 676T222 710Q288 710 326 678T381 569T399 357Q399 220 380 140T319 25T211 -10Q143 -10 105 21ZM251 73T272 101T302 190T312 355Q312 459
304 517T276 601T220 627Q184 627 163 599T131 507T121 334Q121 238 129 182T158 99T214 73Q251 73 272 101ZM249 768T198 804T136 855Q140 877 150 896T173 916Q180 916 228 875T307 798Q306 795 302 784T291 763T276 753Q249 768 198 804Z" />
<glyph unicode="&#xd3;" glyph-name="Oacute" horiz-adv-x="429" d="M143 -10T105 21T48 131T30 354Q30 486 50 564T113 676T222 710Q288 710 326 678T381 569T399 357Q399 220 380 140T319 25T211 -10Q143 -10 105 21ZM251 73T272 101T302 190T312 355Q312 459
304 517T276 601T220 627Q184 627 163 599T131 507T121 334Q121 238 129 182T158 99T214 73Q251 73 272 101ZM159 760T152 770T141 791T136 805Q168 841 215 881T270 922Q283 922 293 903T307 861Q295 848 244 811T167 760Q159 760 152 770Z" />
<glyph unicode="&#xd4;" glyph-name="Ocircumflex" horiz-adv-x="429" d="M143 -10T105 21T48 131T30 354Q30 486 50 564T113 676T222 710Q288 710 326 678T381 569T399 357Q399 220 380 140T319 25T211 -10Q143 -10 105 21ZM251 73T272 101T302 190T312 355Q312
459 304 517T276 601T220 627Q184 627 163 599T131 507T121 334Q121 238 129 182T158 99T214 73Q251 73 272 101ZM275 770T251 796T218 838Q214 832 199 814T168 779T143 762Q107 762 88 785L202 908Q210 911 219 911Q233 911 244 899Q251 892 274 867T319 817T341
784Q341 774 324 768T284 761Q275 770 251 796Z" />
<glyph unicode="&#xd5;" glyph-name="Otilde" horiz-adv-x="429" d="M143 -10T105 21T48 131T30 354Q30 486 50 564T113 676T222 710Q288 710 326 678T381 569T399 357Q399 220 380 140T319 25T211 -10Q143 -10 105 21ZM251 73T272 101T302 190T312 355Q312 459
304 517T276 601T220 627Q184 627 163 599T131 507T121 334Q121 238 129 182T158 99T214 73Q251 73 272 101ZM234 763T223 770T201 790Q191 801 184 806T166 811Q152 811 143 804T123 785T107 772Q97 772 89 781T75 799T68 812Q92 851 121 869T181 887Q196 887
205 881T226 863Q237 851 246 845T268 839Q288 839 298 846T318 866T333 878Q341 878 347 868T357 847T362 833Q358 824 343 808T305 777T254 763Q234 763 223 770Z" />
<glyph unicode="&#xd6;" glyph-name="Odieresis" horiz-adv-x="429" d="M143 -10T105 21T48 131T30 354Q30 486 50 564T113 676T222 710Q288 710 326 678T381 569T399 357Q399 220 380 140T319 25T211 -10Q143 -10 105 21ZM251 73T272 101T302 190T312 355Q312
459 304 517T276 601T220 627Q184 627 163 599T131 507T121 334Q121 238 129 182T158 99T214 73Q251 73 272 101ZM133 773T124 786T114 832Q114 859 125 874T158 889Q180 889 188 877T197 834Q197 804 186 788T153 772Q133 773 124 786ZM253 773T243 785T233 828Q233
889 277 889Q299 889 307 877T316 834Q314 772 272 772Q253 773 243 785Z" />
<glyph unicode="&#xd7;" glyph-name="multiply" horiz-adv-x="418" d="M257 281L345 183Q319 157 309 149T292 140Q290 140 284 144L209 228L133 144Q127 140 125 140Q118 140 108 148T72 183L160 281L71 381Q76 386 90 399T111 418T124 423Q129 423 133 419L209
335L284 419Q288 423 293 423Q300 423 308 416T329 398T346 381L257 281Z" />
<glyph unicode="&#xd8;" glyph-name="Oslash" horiz-adv-x="436" d="M415 685T381 585Q403 506 403 357Q403 220 383 140T322 25T214 -10Q174 -10 145 0T94 35Q81 -1 73 -16Q59 -16 43 -9T24 9Q23 12 35 44T59 102Q33 183 33 354Q33 486 53 564T114 676T222 710Q262
710 291 699T341 664Q359 712 363 719Q367 719 378 717T401 709T414 694Q415 685 381 585ZM186 628T165 600T134 507T124 334Q124 228 132 176L281 599Q261 628 222 628Q186 628 165 600ZM247 73T269 95T303 178T315 355Q315 463 307 516Q249 349 157 98Q176 73
211 73Q247 73 269 95Z" />
<glyph unicode="&#xd9;" glyph-name="Ugrave" horiz-adv-x="437" d="M148 -10T109 18T57 91T44 205V683Q44 692 47 695T71 699T127 700V202Q127 133 146 99T224 65Q249 65 274 70T312 82V683Q312 692 316 695T340 699T394 700V26Q373 12 326 1T224 -10Q148 -10
109 18ZM253 768T202 804T140 855Q144 877 154 896T177 916Q184 916 232 875T311 798Q310 795 306 784T295 763T280 753Q253 768 202 804Z" />
<glyph unicode="&#xda;" glyph-name="Uacute" horiz-adv-x="437" d="M148 -10T109 18T57 91T44 205V683Q44 692 47 695T71 699T127 700V202Q127 133 146 99T224 65Q249 65 274 70T312 82V683Q312 692 316 695T340 699T394 700V26Q373 12 326 1T224 -10Q148 -10
109 18ZM163 760T156 770T145 791T140 805Q172 841 219 881T274 922Q287 922 297 903T311 861Q299 848 248 811T171 760Q163 760 156 770Z" />
<glyph unicode="&#xdb;" glyph-name="Ucircumflex" horiz-adv-x="437" d="M148 -10T109 18T57 91T44 205V683Q44 692 47 695T71 699T127 700V202Q127 133 146 99T224 65Q249 65 274 70T312 82V683Q312 692 316 695T340 699T394 700V26Q373 12 326 1T224 -10Q148
-10 109 18ZM279 770T255 796T222 838Q218 832 203 814T172 779T147 762Q111 762 92 785L206 908Q214 911 223 911Q237 911 248 899Q255 892 278 867T323 817T345 784Q345 774 328 768T288 761Q279 770 255 796Z" />
<glyph unicode="&#xdc;" glyph-name="Udieresis" horiz-adv-x="437" d="M148 -10T109 18T57 91T44 205V683Q44 692 47 695T71 699T127 700V202Q127 133 146 99T224 65Q249 65 274 70T312 82V683Q312 692 316 695T340 699T394 700V26Q373 12 326 1T224 -10Q148
-10 109 18ZM137 773T128 786T118 832Q118 859 129 874T162 889Q184 889 192 877T201 834Q201 804 190 788T157 772Q137 773 128 786ZM257 773T247 785T237 828Q237 889 281 889Q303 889 311 877T320 834Q318 772 276 772Q257 773 247 785Z" />
<glyph unicode="&#xdd;" glyph-name="Yacute" horiz-adv-x="364" d="M225 16Q225 7 222 4T198 1T144 0V285L6 687Q4 694 8 696T35 699T97 700L137 563Q152 516 168 446T187 353Q189 375 206 445T238 563L273 685Q275 693 279 696T304 699T360 700L225 290V16ZM126
760T119 770T108 791T103 805Q135 841 182 881T237 922Q250 922 260 903T274 861Q262 848 211 811T134 760Q126 760 119 770Z" />
<glyph unicode="&#xde;" glyph-name="Thorn" horiz-adv-x="361" d="M44 680Q44 693 54 696T98 700H124V566H159Q254 566 298 519T343 369Q343 253 293 202T160 150H124V16Q124 7 120 4T96 1T44 0V680ZM212 225T233 260T254 378Q254 435 236 465T174 495Q139 495
124 493V228Q131 228 144 227T168 225Q212 225 233 260Z" />
<glyph unicode="&#xdf;" glyph-name="germandbls" horiz-adv-x="465" d="M65 -9T52 -4T39 2Q40 4 42 13T47 38T50 74L48 550Q48 629 90 667T208 705Q277 705 322 685T388 631T409 561Q409 529 394 510T348 467Q323 449 312 436T300 403Q300 385 313 368T355 325Q387
294 407 270T441 213T456 138Q456 70 416 31T306 -9Q269 -9 242 -2T201 15T187 36Q187 69 208 90Q217 81 238 72T288 63Q324 63 345 82T366 137Q366 172 347 201T288 270Q250 309 231 337T212 399Q212 432 228 452T276 497Q300 515 311 528T323 560Q323 589 295
609T214 630Q166 630 148 601T129 504L131 44Q131 14 122 3T84 -9Q65 -9 52 -4Z" />
<glyph unicode="&#xe0;" glyph-name="agrave" horiz-adv-x="354" d="M102 -10T66 20T29 142Q29 237 65 271T163 306Q210 306 236 293V372Q236 406 221 419T174 432Q138 432 101 426T41 409Q30 430 30 456Q30 476 41 483Q56 493 99 501T194 510Q259 510 288 482T317
388V335Q317 115 311 24Q287 9 250 0T166 -10Q102 -10 66 20ZM196 58T211 63T233 74Q236 108 236 236Q217 246 189 246Q153 246 133 225T113 144Q113 93 129 76T180 58Q196 58 211 63ZM209 568T158 604T96 655Q100 677 110 696T133 716Q140 716 188 675T267 598Q266
595 262 584T251 563T236 553Q209 568 158 604Z" />
<glyph unicode="&#xe1;" glyph-name="aacute" horiz-adv-x="354" d="M102 -10T66 20T29 142Q29 237 65 271T163 306Q210 306 236 293V372Q236 406 221 419T174 432Q138 432 101 426T41 409Q30 430 30 456Q30 476 41 483Q56 493 99 501T194 510Q259 510 288 482T317
388V335Q317 115 311 24Q287 9 250 0T166 -10Q102 -10 66 20ZM196 58T211 63T233 74Q236 108 236 236Q217 246 189 246Q153 246 133 225T113 144Q113 93 129 76T180 58Q196 58 211 63ZM119 560T112 570T101 591T96 605Q128 641 175 681T230 722Q243 722 253 703T267
661Q255 648 204 611T127 560Q119 560 112 570Z" />
<glyph unicode="&#xe2;" glyph-name="acircumflex" horiz-adv-x="354" d="M102 -10T66 20T29 142Q29 237 65 271T163 306Q210 306 236 293V372Q236 406 221 419T174 432Q138 432 101 426T41 409Q30 430 30 456Q30 476 41 483Q56 493 99 501T194 510Q259 510 288
482T317 388V335Q317 115 311 24Q287 9 250 0T166 -10Q102 -10 66 20ZM196 58T211 63T233 74Q236 108 236 236Q217 246 189 246Q153 246 133 225T113 144Q113 93 129 76T180 58Q196 58 211 63ZM235 570T211 596T178 638Q174 632 159 614T128 579T103 562Q67 562
48 585L162 708Q170 711 179 711Q193 711 204 699Q211 692 234 667T279 617T301 584Q301 574 284 568T244 561Q235 570 211 596Z" />
<glyph unicode="&#xe3;" glyph-name="atilde" horiz-adv-x="354" d="M102 -10T66 20T29 142Q29 237 65 271T163 306Q210 306 236 293V372Q236 406 221 419T174 432Q138 432 101 426T41 409Q30 430 30 456Q30 476 41 483Q56 493 99 501T194 510Q259 510 288 482T317
388V335Q317 115 311 24Q287 9 250 0T166 -10Q102 -10 66 20ZM196 58T211 63T233 74Q236 108 236 236Q217 246 189 246Q153 246 133 225T113 144Q113 93 129 76T180 58Q196 58 211 63ZM194 563T183 570T161 590Q151 601 144 606T126 611Q112 611 103 604T83 585T67
572Q57 572 49 581T35 599T28 612Q52 651 81 669T141 687Q156 687 165 681T186 663Q197 651 206 645T228 639Q248 639 258 646T278 666T293 678Q301 678 307 668T317 647T322 633Q318 624 303 608T265 577T214 563Q194 563 183 570Z" />
<glyph unicode="&#xe4;" glyph-name="adieresis" horiz-adv-x="354" d="M102 -10T66 20T29 142Q29 237 65 271T163 306Q210 306 236 293V372Q236 406 221 419T174 432Q138 432 101 426T41 409Q30 430 30 456Q30 476 41 483Q56 493 99 501T194 510Q259 510 288
482T317 388V335Q317 115 311 24Q287 9 250 0T166 -10Q102 -10 66 20ZM196 58T211 63T233 74Q236 108 236 236Q217 246 189 246Q153 246 133 225T113 144Q113 93 129 76T180 58Q196 58 211 63ZM93 573T84 586T74 632Q74 659 85 674T118 689Q140 689 148 677T157
634Q157 604 146 588T113 572Q93 573 84 586ZM213 573T203 585T193 628Q193 689 237 689Q259 689 267 677T276 634Q274 572 232 572Q213 573 203 585Z" />
<glyph unicode="&#xe5;" glyph-name="aring" horiz-adv-x="354" d="M102 -10T66 20T29 142Q29 237 65 271T163 306Q210 306 236 293V372Q236 406 221 419T174 432Q138 432 101 426T41 409Q30 430 30 456Q30 476 41 483Q56 493 99 501T194 510Q259 510 288 482T317
388V335Q317 115 311 24Q287 9 250 0T166 -10Q102 -10 66 20ZM196 58T211 63T233 74Q236 108 236 236Q217 246 189 246Q153 246 133 225T113 144Q113 93 129 76T180 58Q196 58 211 63ZM125 543T102 564T79 639Q79 688 105 712T179 737Q227 737 249 716T271 640Q271
592 246 568T172 543Q125 543 102 564ZM215 597T215 640Q215 662 206 671T179 681Q136 681 136 638Q136 618 145 608T174 597Q215 597 215 640Z" />
<glyph unicode="&#xe6;" glyph-name="ae" horiz-adv-x="583" d="M478 69T532 100Q539 79 539 28Q539 21 520 13T468 -2T401 -9Q367 -9 344 -3T302 20Q255 -9 164 -9Q122 -9 94 1T47 46T29 148Q29 319 160 319Q210 319 236 306V378Q236 412 218 425T168 438Q93
438 42 411Q32 429 32 459Q32 466 35 472T42 483Q58 494 98 502T197 510Q238 510 262 497T296 453Q317 487 346 498T418 510Q545 510 545 351Q545 270 534 220Q497 214 445 214Q383 214 324 225Q324 157 333 124T360 80T410 69Q478 69 532 100ZM376 439T354 406T326
289Q388 277 426 277Q446 277 462 280Q467 303 467 342Q466 397 454 418T409 439Q376 439 354 406ZM236 250Q217 258 189 258Q154 258 134 235T113 149Q113 110 121 90T142 64T178 58Q195 58 212 62T236 74V250Z" />
<glyph unicode="&#xe7;" glyph-name="ccedilla" horiz-adv-x="313" d="M227 62T248 68T284 85Q292 56 292 41Q292 20 262 6T184 -10L174 -59Q175 -58 191 -58Q211 -58 225 -74T240 -122Q240 -160 218 -183T160 -206Q141 -206 123 -200T104 -193Q105 -188 109 -172T117
-152Q120 -149 135 -156T162 -163Q193 -163 193 -129Q193 -95 163 -95Q147 -95 136 -97T122 -101L139 -7Q102 -1 79 23T43 99T31 239Q31 400 81 455T210 510Q246 510 270 497T294 465Q294 442 285 420Q251 439 214 439Q170 439 142 399T114 238Q114 169 123 131T152
77T204 62Q227 62 248 68Z" />
<glyph unicode="&#xe8;" glyph-name="egrave" horiz-adv-x="361" d="M267 68T321 100Q328 78 328 45Q328 22 288 6T190 -10Q139 -10 105 9T50 79T30 224Q30 341 54 404T117 488T207 510Q334 510 334 350Q334 270 323 220Q279 211 221 208T113 204Q115 150 125
121T155 80T207 68Q267 68 321 100ZM162 439T140 402T114 268Q213 268 251 280Q256 303 256 340Q255 396 243 417T198 439Q162 439 140 402ZM223 568T172 604T110 655Q114 677 124 696T147 716Q154 716 202 675T281 598Q280 595 276 584T265 563T250 553Q223 568
172 604Z" />
<glyph unicode="&#xe9;" glyph-name="eacute" horiz-adv-x="361" d="M267 68T321 100Q328 78 328 45Q328 22 288 6T190 -10Q139 -10 105 9T50 79T30 224Q30 341 54 404T117 488T207 510Q334 510 334 350Q334 270 323 220Q279 211 221 208T113 204Q115 150 125
121T155 80T207 68Q267 68 321 100ZM162 439T140 402T114 268Q213 268 251 280Q256 303 256 340Q255 396 243 417T198 439Q162 439 140 402ZM133 560T126 570T115 591T110 605Q142 641 189 681T244 722Q257 722 267 703T281 661Q269 648 218 611T141 560Q133 560
126 570Z" />
<glyph unicode="&#xea;" glyph-name="ecircumflex" horiz-adv-x="361" d="M267 68T321 100Q328 78 328 45Q328 22 288 6T190 -10Q139 -10 105 9T50 79T30 224Q30 341 54 404T117 488T207 510Q334 510 334 350Q334 270 323 220Q279 211 221 208T113 204Q115 150
125 121T155 80T207 68Q267 68 321 100ZM162 439T140 402T114 268Q213 268 251 280Q256 303 256 340Q255 396 243 417T198 439Q162 439 140 402ZM249 570T225 596T192 638Q188 632 173 614T142 579T117 562Q81 562 62 585L176 708Q184 711 193 711Q207 711 218
699Q225 692 248 667T293 617T315 584Q315 574 298 568T258 561Q249 570 225 596Z" />
<glyph unicode="&#xeb;" glyph-name="edieresis" horiz-adv-x="361" d="M267 68T321 100Q328 78 328 45Q328 22 288 6T190 -10Q139 -10 105 9T50 79T30 224Q30 341 54 404T117 488T207 510Q334 510 334 350Q334 270 323 220Q279 211 221 208T113 204Q115 150 125
121T155 80T207 68Q267 68 321 100ZM162 439T140 402T114 268Q213 268 251 280Q256 303 256 340Q255 396 243 417T198 439Q162 439 140 402ZM107 573T98 586T88 632Q88 659 99 674T132 689Q154 689 162 677T171 634Q171 604 160 588T127 572Q107 573 98 586ZM227
573T217 585T207 628Q207 689 251 689Q273 689 281 677T290 634Q288 572 246 572Q227 573 217 585Z" />
<glyph unicode="&#xec;" glyph-name="igrave" horiz-adv-x="175" d="M47 463Q47 482 53 489T75 498T128 500V16Q128 7 125 4T101 1T47 0V463ZM377 568T326 604T264 655Q268 677 278 696T301 716Q308 716 356 675T435 598Q434 595 430 584T419 563T404 553Q377
568 326 604Z" />
<glyph unicode="&#xed;" glyph-name="iacute" horiz-adv-x="175" d="M47 463Q47 482 53 489T75 498T128 500V16Q128 7 125 4T101 1T47 0V463ZM31 560T24 570T13 591T8 605Q40 641 87 681T142 722Q155 722 165 703T179 661Q167 648 116 611T39 560Q31 560 24 570Z" />
<glyph unicode="&#xee;" glyph-name="icircumflex" horiz-adv-x="175" d="M47 463Q47 482 53 489T75 498T128 500V16Q128 7 125 4T101 1T47 0V463ZM147 570T123 596T90 638Q86 632 71 614T40 579T15 562Q-21 562 -40 585L74 708Q82 711 91 711Q105 711 116 699Q123
692 146 667T191 617T213 584Q213 574 196 568T156 561Q147 570 123 596Z" />
<glyph unicode="&#xef;" glyph-name="idieresis" horiz-adv-x="175" d="M47 463Q47 482 53 489T75 498T128 500V16Q128 7 125 4T101 1T47 0V463ZM261 573T252 586T242 632Q242 659 253 674T286 689Q308 689 316 677T325 634Q325 604 314 588T281 572Q261 573 252
586ZM381 573T371 585T361 628Q361 689 405 689Q427 689 435 677T444 634Q442 572 400 572Q381 573 371 585Z" />
<glyph unicode="&#xf0;" glyph-name="eth" horiz-adv-x="408" d="M380 504T380 289Q380 149 344 70T209 -10Q116 -10 73 51T30 257Q30 378 73 443T190 509Q244 509 278 480Q260 547 224 602L129 565Q121 585 116 600T111 623Q111 633 119 637L177 659Q163 675
125 707Q134 724 150 734T183 744Q203 744 213 732Q233 716 257 690L326 717Q334 697 339 682T344 659Q344 649 336 646L300 632Q380 504 380 289ZM263 58T280 116T298 286Q298 349 293 388Q264 437 212 437Q163 437 138 383T112 244Q112 58 207 58Q263 58 280
116Z" />
<glyph unicode="&#xf1;" glyph-name="ntilde" horiz-adv-x="383" d="M45 476Q76 490 121 500T204 510Q282 510 313 480T344 376V16Q344 7 340 4T316 1T261 0V352Q261 402 249 421T201 440Q183 440 162 436T126 422V16Q126 7 122 4T98 1T45 0V476ZM211 563T200
570T178 590Q168 601 161 606T143 611Q129 611 120 604T100 585T84 572Q74 572 66 581T52 599T45 612Q69 651 98 669T158 687Q173 687 182 681T203 663Q214 651 223 645T245 639Q265 639 275 646T295 666T310 678Q318 678 324 668T334 647T339 633Q335 624 320
608T282 577T231 563Q211 563 200 570Z" />
<glyph unicode="&#xf2;" glyph-name="ograve" horiz-adv-x="376" d="M128 -10T95 9T45 84T27 250Q27 510 194 510Q249 510 282 488T332 409T349 252Q349 116 308 53T184 -10Q128 -10 95 9ZM222 58T241 100T261 252Q261 330 254 371T231 427T191 442Q154 442 135
400T115 248Q115 168 123 127T146 72T186 58Q222 58 241 100ZM224 568T173 604T111 655Q115 677 125 696T148 716Q155 716 203 675T282 598Q281 595 277 584T266 563T251 553Q224 568 173 604Z" />
<glyph unicode="&#xf3;" glyph-name="oacute" horiz-adv-x="376" d="M128 -10T95 9T45 84T27 250Q27 510 194 510Q249 510 282 488T332 409T349 252Q349 116 308 53T184 -10Q128 -10 95 9ZM222 58T241 100T261 252Q261 330 254 371T231 427T191 442Q154 442 135
400T115 248Q115 168 123 127T146 72T186 58Q222 58 241 100ZM134 560T127 570T116 591T111 605Q143 641 190 681T245 722Q258 722 268 703T282 661Q270 648 219 611T142 560Q134 560 127 570Z" />
<glyph unicode="&#xf4;" glyph-name="ocircumflex" horiz-adv-x="376" d="M128 -10T95 9T45 84T27 250Q27 510 194 510Q249 510 282 488T332 409T349 252Q349 116 308 53T184 -10Q128 -10 95 9ZM222 58T241 100T261 252Q261 330 254 371T231 427T191 442Q154 442
135 400T115 248Q115 168 123 127T146 72T186 58Q222 58 241 100ZM250 570T226 596T193 638Q189 632 174 614T143 579T118 562Q82 562 63 585L177 708Q185 711 194 711Q208 711 219 699Q226 692 249 667T294 617T316 584Q316 574 299 568T259 561Q250 570 226 596Z"
/>
<glyph unicode="&#xf5;" glyph-name="otilde" horiz-adv-x="376" d="M128 -10T95 9T45 84T27 250Q27 510 194 510Q249 510 282 488T332 409T349 252Q349 116 308 53T184 -10Q128 -10 95 9ZM222 58T241 100T261 252Q261 330 254 371T231 427T191 442Q154 442 135
400T115 248Q115 168 123 127T146 72T186 58Q222 58 241 100ZM209 563T198 570T176 590Q166 601 159 606T141 611Q127 611 118 604T98 585T82 572Q72 572 64 581T50 599T43 612Q67 651 96 669T156 687Q171 687 180 681T201 663Q212 651 221 645T243 639Q263 639
273 646T293 666T308 678Q316 678 322 668T332 647T337 633Q333 624 318 608T280 577T229 563Q209 563 198 570Z" />
<glyph unicode="&#xf6;" glyph-name="odieresis" horiz-adv-x="376" d="M128 -10T95 9T45 84T27 250Q27 510 194 510Q249 510 282 488T332 409T349 252Q349 116 308 53T184 -10Q128 -10 95 9ZM222 58T241 100T261 252Q261 330 254 371T231 427T191 442Q154 442
135 400T115 248Q115 168 123 127T146 72T186 58Q222 58 241 100ZM108 573T99 586T89 632Q89 659 100 674T133 689Q155 689 163 677T172 634Q172 604 161 588T128 572Q108 573 99 586ZM228 573T218 585T208 628Q208 689 252 689Q274 689 282 677T291 634Q289 572
247 572Q228 573 218 585Z" />
<glyph unicode="&#xf7;" glyph-name="divide" horiz-adv-x="418" d="M181 376T170 389T159 427Q159 448 172 463T208 478Q258 478 258 427Q258 405 245 391T208 376Q181 376 170 389ZM34 290T36 303T51 317H384Q384 275 382 261T368 247H34Q34 290 36 303ZM181
81T170 94T159 132Q159 153 172 168T208 183Q258 183 258 132Q258 110 245 96T208 81Q181 81 170 94Z" />
<glyph unicode="&#xf8;" glyph-name="oslash" horiz-adv-x="412" d="M403 484T388 454T356 395Q369 343 369 252Q369 116 329 53T207 -10Q167 -10 140 -2T93 29L62 -26Q46 -23 32 -14T17 8Q17 14 63 92Q48 149 48 250Q48 510 213 510Q250 510 277 501T323 468Q351
515 357 522Q360 521 371 517T393 506T403 489Q403 484 388 454ZM174 440T155 399T135 248Q135 216 137 176L266 404Q257 425 244 432T211 440Q174 440 155 399ZM243 58T262 100T282 252Q282 298 279 331Q275 323 194 179L150 101Q158 76 172 67T207 58Q243 58
262 100Z" />
<glyph unicode="&#xf9;" glyph-name="ugrave" horiz-adv-x="389" d="M135 -10T103 8T58 61T45 156V484Q45 493 48 496T72 499T128 500V149Q128 98 141 79T196 60Q236 60 263 79V484Q263 493 267 496T290 499T344 500V26Q314 10 274 0T194 -10Q135 -10 103 8ZM229
568T178 604T116 655Q120 677 130 696T153 716Q160 716 208 675T287 598Q286 595 282 584T271 563T256 553Q229 568 178 604Z" />
<glyph unicode="&#xfa;" glyph-name="uacute" horiz-adv-x="389" d="M135 -10T103 8T58 61T45 156V484Q45 493 48 496T72 499T128 500V149Q128 98 141 79T196 60Q236 60 263 79V484Q263 493 267 496T290 499T344 500V26Q314 10 274 0T194 -10Q135 -10 103 8ZM139
560T132 570T121 591T116 605Q148 641 195 681T250 722Q263 722 273 703T287 661Q275 648 224 611T147 560Q139 560 132 570Z" />
<glyph unicode="&#xfb;" glyph-name="ucircumflex" horiz-adv-x="389" d="M135 -10T103 8T58 61T45 156V484Q45 493 48 496T72 499T128 500V149Q128 98 141 79T196 60Q236 60 263 79V484Q263 493 267 496T290 499T344 500V26Q314 10 274 0T194 -10Q135 -10 103
8ZM255 570T231 596T198 638Q194 632 179 614T148 579T123 562Q87 562 68 585L182 708Q190 711 199 711Q213 711 224 699Q231 692 254 667T299 617T321 584Q321 574 304 568T264 561Q255 570 231 596Z" />
<glyph unicode="&#xfc;" glyph-name="udieresis" horiz-adv-x="389" d="M135 -10T103 8T58 61T45 156V484Q45 493 48 496T72 499T128 500V149Q128 98 141 79T196 60Q236 60 263 79V484Q263 493 267 496T290 499T344 500V26Q314 10 274 0T194 -10Q135 -10 103 8ZM113
573T104 586T94 632Q94 659 105 674T138 689Q160 689 168 677T177 634Q177 604 166 588T133 572Q113 573 104 586ZM233 573T223 585T213 628Q213 689 257 689Q279 689 287 677T296 634Q294 572 252 572Q233 573 223 585Z" />
<glyph unicode="&#xfd;" glyph-name="yacute" horiz-adv-x="357" d="M-4 -193T-4 -154Q-4 -142 -1 -130T8 -109Q18 -116 35 -120T71 -124Q97 -124 115 -100T144 -16L24 478Q22 486 22 489Q22 497 35 498T102 500L157 260Q167 211 174 156T184 83Q186 99 192 154T208
261L253 477Q255 490 259 494T279 499T340 500L217 -27Q202 -91 184 -127T140 -178T77 -193Q-4 -193 -4 -154ZM122 560T115 570T104 591T99 605Q131 641 178 681T233 722Q246 722 256 703T270 661Q258 648 207 611T130 560Q122 560 115 570Z" />
<glyph unicode="&#xfe;" glyph-name="thorn" d="M273 509T314 463T355 300Q355 123 309 57T203 -10Q153 -10 127 16V-194Q108 -200 79 -200Q58 -200 52 -194T46 -166V698Q46 717 52 724T74 733T127 735V502Q156 509 192 509Q273 509 314 463ZM212 60T239 109T266
293Q266 354 257 385T232 428T188 439Q154 439 127 418V88Q143 59 178 59Q212 60 239 109Z" />
<glyph unicode="&#xff;" glyph-name="ydieresis" horiz-adv-x="357" d="M-4 -193T-4 -154Q-4 -142 -1 -130T8 -109Q18 -116 35 -120T71 -124Q97 -124 115 -100T144 -16L24 478Q22 486 22 489Q22 497 35 498T102 500L157 260Q167 211 174 156T184 83Q186 99 192
154T208 261L253 477Q255 490 259 494T279 499T340 500L217 -27Q202 -91 184 -127T140 -178T77 -193Q-4 -193 -4 -154ZM96 573T87 586T77 632Q77 659 88 674T121 689Q143 689 151 677T160 634Q160 604 149 588T116 572Q96 573 87 586ZM216 573T206 585T196 628Q196
689 240 689Q262 689 270 677T279 634Q277 572 235 572Q216 573 206 585Z" />
<glyph unicode="&#x2013;" glyph-name="endash" horiz-adv-x="424" d="M37 290T39 303T54 317H387Q387 275 385 261T371 247H37Q37 290 39 303Z" />
<glyph unicode="&#x2014;" glyph-name="emdash" horiz-adv-x="700" d="M6 290T8 303T22 317H694Q694 275 692 261T678 247H6Q6 290 8 303Z" />
<glyph unicode="&#x2018;" glyph-name="quoteleft" horiz-adv-x="174" d="M34 575T34 634Q34 668 48 705T80 769T108 795Q135 795 140 772Q127 747 122 725T115 676Q138 661 138 627Q138 605 124 590T88 575Q34 575 34 634Z" />
<glyph unicode="&#x2019;" glyph-name="quoteright" horiz-adv-x="174" d="M41 572T34 595Q48 621 52 642T59 692Q36 706 36 740Q36 763 50 777T86 792Q141 792 141 733Q141 699 127 662T94 598T66 572Q41 572 34 595Z" />
<glyph unicode="&#x201a;" glyph-name="quotesinglbase" horiz-adv-x="170" d="M41 -114T34 -91Q48 -66 52 -45T59 5Q36 19 36 54Q36 76 50 91T86 106Q141 106 141 47Q141 13 127 -24T94 -88T66 -114Q41 -114 34 -91Z" />
<glyph unicode="&#x201c;" glyph-name="quotedblleft" horiz-adv-x="324" d="M34 575T34 634Q34 668 48 705T80 769T108 795Q135 795 140 772Q127 747 122 725T115 676Q138 661 138 627Q138 605 124 590T88 575Q34 575 34 634ZM184 575T184 634Q184 668 198 705T230
769T258 795Q285 795 290 772Q276 747 272 726T265 676Q288 661 288 627Q288 605 274 590T238 575Q184 575 184 634Z" />
<glyph unicode="&#x201d;" glyph-name="quotedblright" horiz-adv-x="324" d="M41 572T34 595Q48 621 52 642T59 692Q36 706 36 740Q36 763 50 777T86 792Q141 792 141 733Q141 699 127 662T94 598T66 572Q41 572 34 595ZM189 572T184 595Q198 621 202 642T209
692Q186 706 186 740Q186 763 200 777T236 792Q291 792 291 733Q291 699 277 662T244 598T216 572Q189 572 184 595Z" />
<glyph unicode="&#x201e;" glyph-name="quotedblbase" horiz-adv-x="321" d="M41 -114T34 -91Q48 -66 52 -45T59 5Q36 19 36 54Q36 76 50 91T86 106Q141 106 141 47Q141 13 127 -24T94 -88T66 -114Q41 -114 34 -91ZM189 -114T184 -91Q198 -66 202 -45T209 5Q186
19 186 54Q186 76 200 91T236 106Q291 106 291 47Q291 13 277 -24T244 -88T216 -114Q189 -114 184 -91Z" />
<glyph unicode="&#x2022;" glyph-name="bullet" horiz-adv-x="223" d="M75 208T58 227T41 284Q41 316 61 338T114 361Q153 361 171 341T189 284Q189 251 169 230T114 208Q75 208 58 227Z" />
<glyph unicode="&#x2039;" glyph-name="guilsinglleft" horiz-adv-x="247" d="M156 16T120 69T51 178T18 250Q18 265 50 320T118 430T164 500Q178 500 188 491T205 472T212 459Q212 442 186 396T132 306T94 250Q103 238 132 196T187 109T214 47Q213 43 207 32T191
11T167 0Q156 16 120 69Z" />
<glyph unicode="&#x203a;" glyph-name="guilsinglright" horiz-adv-x="247" d="M77 1T66 6T44 21T33 46Q33 62 59 107T115 195T153 250Q144 263 116 306T61 395T35 459Q35 471 45 480T67 494T83 500Q94 484 129 430T196 321T229 250Q229 234 196 179T128 70T81
0Q77 1 66 6Z" />
</font>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,12 @@
@font-face {
font-family: 'Yanone Kaffeesatz';
font-style: normal;
font-weight: 400;
src:
local('Yanone Kaffeesatz Regular'),
local('YanoneKaffeesatz-Regular'),
/* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */
url('Yanone_Kaffeesatz_400.woff') format('woff'),
/* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */
url('Yanone_Kaffeesatz_400.woff2') format('woff2');
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 840 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B

Some files were not shown because too many files have changed in this diff Show More