Merge pull request #1 from DFHack/develop

sync with upstream
develop
David 2020-11-18 00:22:56 +01:00 committed by GitHub
commit 0f849cf278
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
202 changed files with 15012 additions and 3733 deletions

@ -0,0 +1,6 @@
Thank you for your interest in contributing to DFHack! If you're reading this
document, you're probably viewing it on GitHub. The DFHack docs are hosted
on [ReadTheDocs](https://dfhack.readthedocs.io/) - in particular, contributing
guidelines are [here](https://docs.dfhack.org/en/latest/docs/Contributing.html).
Double-checking the style guidelines before submitting a pull request is
always appreciated.

@ -0,0 +1,177 @@
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: ${{ matrix.os }}
name: build (Linux, GCC ${{ matrix.gcc }}, ${{ matrix.plugins }} plugins)
strategy:
fail-fast: false
matrix:
os:
- ubuntu-18.04
gcc:
- 4.8
- 7
plugins:
- default
include:
- os: ubuntu-20.04
gcc: 10
plugins: all
steps:
- name: Set up Python 3
uses: actions/setup-python@v2
with:
python-version: 3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install \
libgtk2.0-0 \
libsdl-image1.2-dev \
libsdl-ttf2.0-dev \
libsdl1.2-dev \
libxml-libxml-perl \
libxml-libxslt-perl \
lua5.3 \
ninja-build \
zlib1g-dev
pip install sphinx
- name: Install GCC
run: |
sudo apt-get install gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
- name: Clone DFHack
uses: actions/checkout@v1
with:
fetch-depth: 0 # unlimited - we need past tags
submodules: true
- name: Set up environment
id: env_setup
run: |
DF_VERSION="$(sh travis/get-df-version.sh)"
echo "::set-output name=df_version::${DF_VERSION}"
echo "DF_VERSION=${DF_VERSION}" >> $GITHUB_ENV
echo "DF_FOLDER=${HOME}/DF/${DF_VERSION}/df_linux" >> $GITHUB_ENV
- name: Fetch DF cache
uses: actions/cache@v2
with:
path: ~/DF
key: ${{ steps.env_setup.outputs.df_version }}
- name: Download DF
run: |
sh travis/download-df.sh
- name: Build DFHack
env:
CC: gcc-${{ matrix.gcc }}
CXX: g++-${{ matrix.gcc }}
run: |
cmake \
-S . \
-B build-ci \
-G Ninja \
-DDFHACK_BUILD_ARCH=64 \
-DBUILD_TESTS:BOOL=ON \
-DBUILD_DEV_PLUGINS:BOOL=${{ matrix.plugins == 'all' }} \
-DBUILD_SIZECHECK:BOOL=${{ matrix.plugins == 'all' }} \
-DBUILD_STONESENSE:BOOL=${{ matrix.plugins == 'all' }} \
-DBUILD_SUPPORTED:BOOL=1 \
-DCMAKE_INSTALL_PREFIX="$DF_FOLDER"
ninja -C build-ci install
- name: Run tests
id: run_tests
run: |
export TERM=dumb
mv "$DF_FOLDER"/dfhack.init-example "$DF_FOLDER"/dfhack.init
script -qe -c "python travis/run-tests.py --headless --keep-status \"$DF_FOLDER\""
python travis/check-rpc.py "$DF_FOLDER/dfhack-rpc.txt"
mkdir -p artifacts
cp "$DF_FOLDER/test_status.json" "$DF_FOLDER"/*.log artifacts
- name: Upload test artifacts
uses: actions/upload-artifact@v1
if: (success() || failure()) && steps.run_tests.outcome != 'skipped'
continue-on-error: true
with:
name: test-artifacts-${{ matrix.gcc }}
path: artifacts
- name: Clean up DF folder
# prevent DFHack-generated files from ending up in the cache
# (download-df.sh also removes them, this is just to save cache space)
if: success() || failure()
run: |
rm -rf "$DF_FOLDER"
docs:
runs-on: ubuntu-18.04
steps:
- name: Set up Python 3
uses: actions/setup-python@v2
with:
python-version: 3
- name: Install dependencies
run: |
pip install sphinx
- name: Clone DFHack
uses: actions/checkout@v1
with:
submodules: true
- name: Build docs
run: |
sphinx-build -W --keep-going -j3 . docs/html
- name: Upload docs
uses: actions/upload-artifact@v1
with:
name: docs
path: docs/html
lint:
runs-on: ubuntu-18.04
steps:
- name: Set up Python 3
uses: actions/setup-python@v2
with:
python-version: 3
- name: Set up Ruby 2.7
uses: actions/setup-ruby@v1
with:
ruby-version: 2.7
- name: Install Lua
run: |
sudo apt-get update
sudo apt-get install lua5.3
- name: Clone DFHack
uses: actions/checkout@v1
with:
submodules: true
# don't need tags here
- name: Check whitespace
run: |
python travis/lint.py
- name: Check Authors.rst
if: success() || failure()
run: |
python travis/authors-rst.py
- name: Check for missing documentation
if: success() || failure()
run: |
python travis/script-docs.py
- name: Check Lua syntax
if: success() || failure()
run: |
python travis/script-syntax.py --ext=lua --cmd="luac5.3 -p" --github-actions
- name: Check Ruby syntax
if: success() || failure()
run: |
python travis/script-syntax.py --ext=rb --cmd="ruby -c" --github-actions
check-pr:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- name: Check that PR is based on develop branch
env:
BASE_BRANCH: ${{ github.base_ref }}
run: |
echo "PR base branch: $BASE_BRANCH"
test "$BASE_BRANCH" = develop

2
.gitignore vendored

@ -17,12 +17,14 @@ build/VC2010
# Sphinx generated documentation # Sphinx generated documentation
docs/_* docs/_*
docs/html/ docs/html/
docs/pdf/
# in-place build # in-place build
build/Makefile build/Makefile
build/CMakeCache.txt build/CMakeCache.txt
build/cmake_install.cmake build/cmake_install.cmake
build/CMakeFiles build/CMakeFiles
build/data
build/doc build/doc
build/lua build/lua
build/bin build/bin

12
.gitmodules vendored

@ -16,3 +16,15 @@
[submodule "depends/jsoncpp"] [submodule "depends/jsoncpp"]
path = depends/jsoncpp-sub path = depends/jsoncpp-sub
url = ../../DFHack/jsoncpp.git url = ../../DFHack/jsoncpp.git
[submodule "depends/xlsxio"]
path = depends/xlsxio
url = ../../DFHack/xlsxio.git
shallow = true
[submodule "depends/libzip"]
path = depends/libzip
url = ../../DFHack/libzip.git
shallow = true
[submodule "depends/libexpat"]
path = depends/libexpat
url = ../../DFHack/libexpat.git
shallow = true

@ -1,64 +0,0 @@
sudo: false
language: cpp
cache:
pip: true
directories:
- $HOME/DF-travis
- $HOME/lua53
addons:
apt:
packages: &default_packages
- libsdl-image1.2-dev
- libsdl-ttf2.0-dev
- libsdl1.2-dev
- libxml-libxml-perl
- libxml-libxslt-perl
- ninja-build
- zlib1g-dev
matrix:
include:
- env: GCC_VERSION=4.8
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- *default_packages
- gcc-4.8
- g++-4.8
before_install:
- export DF_VERSION=$(sh travis/get-df-version.sh)
- export DF_FOLDER="$HOME/DF-travis/$DF_VERSION/df_linux"
- pip install --user "sphinx==1.4" "requests[security]"
- sh travis/build-lua.sh
- sh travis/download-df.sh
script:
- export PATH="$PATH:$HOME/lua53/bin"
- git tag tmp-travis-build
- sh travis/git-info.sh
- sphinx-build -qW -j3 . docs/html
- python travis/pr-check-base.py
- python travis/lint.py
- python travis/authors-rst.py
- python travis/script-docs.py
- python travis/script-syntax.py --ext=lua --cmd="luac5.3 -p"
- python travis/script-syntax.py --ext=rb --cmd="ruby -c"
- mkdir build-travis
- cd build-travis
- cmake .. -G Ninja -DCMAKE_C_COMPILER=gcc-$GCC_VERSION -DCMAKE_CXX_COMPILER=g++-$GCC_VERSION -DDFHACK_BUILD_ARCH=64 -DBUILD_DOCS:BOOL=ON -DBUILD_TESTS:BOOL=ON -DCMAKE_INSTALL_PREFIX="$DF_FOLDER"
- ninja -j3 install
- mv "$DF_FOLDER"/dfhack.init-example "$DF_FOLDER"/dfhack.init
- cd ..
- python travis/run-tests.py --headless --keep-status "$DF_FOLDER"
- python travis/check-rpc.py "$DF_FOLDER/dfhack-rpc.txt"
- cat "$DF_FOLDER/test_status.json"
before_cache:
- cat "$DF_FOLDER/stderr.log"
- rm -rf "$DF_FOLDER"
notifications:
email: false
irc:
channels:
- "chat.freenode.net#dfhack"
on_success: change
on_failure: always

@ -2,6 +2,7 @@
## some generic CMake magic ## some generic CMake magic
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
cmake_policy(SET CMP0048 NEW)
project(dfhack) project(dfhack)
if("${CMAKE_GENERATOR}" STREQUAL Ninja) if("${CMAKE_GENERATOR}" STREQUAL Ninja)
@ -10,6 +11,12 @@ if("${CMAKE_GENERATOR}" STREQUAL Ninja)
endif() endif()
endif() endif()
if(NOT("${CMAKE_VERSION}" VERSION_LESS 3.12))
# make ZLIB_ROOT work in CMake >= 3.12
# https://cmake.org/cmake/help/git-stage/policy/CMP0074.html
cmake_policy(SET CMP0074 NEW)
endif()
# Set up build types # Set up build types
if(CMAKE_CONFIGURATION_TYPES) if(CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES "Release;RelWithDebInfo" CACHE STRING "List of supported configuration types" FORCE) set(CMAKE_CONFIGURATION_TYPES "Release;RelWithDebInfo" CACHE STRING "List of supported configuration types" FORCE)
@ -83,6 +90,10 @@ if(MSVC)
# a smaller type, and most of the time this is just conversion from 64 to 32 bits # a smaller type, and most of the time this is just conversion from 64 to 32 bits
# for things like vector sizes, which are never that big anyway. # for things like vector sizes, which are never that big anyway.
add_definitions("/wd4267") add_definitions("/wd4267")
# MSVC panics if an object file contains more than 65,279 sections. this
# happens quite frequently with code that uses templates, such as vectors.
add_definitions("/bigobj")
endif() endif()
# Automatically detect architecture based on Visual Studio generator # Automatically detect architecture based on Visual Studio generator
@ -168,14 +179,14 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
endif() endif()
# make sure all the necessary submodules have been set up # make sure all the necessary submodules have been set up
if(NOT EXISTS ${dfhack_SOURCE_DIR}/library/xml/codegen.pl OR NOT EXISTS ${dfhack_SOURCE_DIR}/depends/clsocket/CMakeLists.txt) if(NOT EXISTS ${dfhack_SOURCE_DIR}/library/xml/codegen.pl OR NOT EXISTS ${dfhack_SOURCE_DIR}/depends/clsocket/CMakeLists.txt OR NOT EXISTS ${dfhack_SOURCE_DIR}/depends/libexpat/expat/CMakeLists.txt OR NOT EXISTS ${dfhack_SOURCE_DIR}/depends/libzip/CMakeLists.txt OR NOT EXISTS ${dfhack_SOURCE_DIR}/depends/xlsxio/CMakeLists.txt)
message(SEND_ERROR "One or more required submodules could not be found! Run 'git submodule update --init' from the root DFHack directory. (See the section 'Getting the Code' in docs/Compile.rst)") message(SEND_ERROR "One or more required submodules could not be found! Run 'git submodule update --init' from the root DFHack directory. (See the section 'Getting the Code' in docs/Compile.rst)")
endif() endif()
# set up versioning. # set up versioning.
set(DF_VERSION "0.47.04") set(DF_VERSION "0.47.04")
set(DFHACK_RELEASE "beta1") set(DFHACK_RELEASE "r3")
set(DFHACK_PRERELEASE TRUE) set(DFHACK_PRERELEASE FALSE)
set(DFHACK_VERSION "${DF_VERSION}-${DFHACK_RELEASE}") set(DFHACK_VERSION "${DF_VERSION}-${DFHACK_RELEASE}")
@ -396,6 +407,7 @@ endif()
include_directories(depends/tthread) include_directories(depends/tthread)
include_directories(${ZLIB_INCLUDE_DIRS}) include_directories(${ZLIB_INCLUDE_DIRS})
include_directories(depends/clsocket/src) include_directories(depends/clsocket/src)
include_directories(depends/xlsxio/include)
add_subdirectory(depends) add_subdirectory(depends)
find_package(Git REQUIRED) find_package(Git REQUIRED)
@ -419,6 +431,7 @@ if(BUILD_PLUGINS)
add_subdirectory(plugins) add_subdirectory(plugins)
endif() endif()
add_subdirectory(data)
add_subdirectory(scripts) add_subdirectory(scripts)
find_package(Sphinx QUIET) find_package(Sphinx QUIET)
@ -429,6 +442,7 @@ if(BUILD_DOCS)
file(GLOB SPHINX_DEPS file(GLOB SPHINX_DEPS
"${CMAKE_CURRENT_SOURCE_DIR}/docs/*.rst" "${CMAKE_CURRENT_SOURCE_DIR}/docs/*.rst"
"${CMAKE_CURRENT_SOURCE_DIR}/docs/guides/*.rst"
"${CMAKE_CURRENT_SOURCE_DIR}/docs/changelog.txt" "${CMAKE_CURRENT_SOURCE_DIR}/docs/changelog.txt"
"${CMAKE_CURRENT_SOURCE_DIR}/docs/gen_changelog.py" "${CMAKE_CURRENT_SOURCE_DIR}/docs/gen_changelog.py"
"${CMAKE_CURRENT_SOURCE_DIR}/docs/images/*.png" "${CMAKE_CURRENT_SOURCE_DIR}/docs/images/*.png"

@ -1,229 +0,0 @@
###########################
How to contribute to DFHack
###########################
.. contents::
.. _contributing-code:
Contributing Code
=================
Several things should be kept in mind when contributing code to DFHack.
Code Format
-----------
* Four space indents for C++. Never use tabs for indentation in any language.
* LF (Unix style) line terminators
* Avoid trailing whitespace
* UTF-8 encoding
* For C++:
* Opening and closing braces on their own lines or opening brace at the end of the previous line
* Braces placed at original indent level if on their own lines
* #includes should be sorted. C++ libraries first, then dfhack modules, then df structures,
then local includes. Within each category they should be sorted alphabetically.
How to get new code into DFHack
-------------------------------
* Submit pull requests to the ``develop`` branch, not the ``master`` branch.
(The ``master`` branch always points at the most recent release)
* Use a new branch for each feature or bugfix so that your changes can be merged independently
(i.e. not the master or develop branch of your fork).
* If possible, compile on multiple platforms when changing anything that compiles
* It must pass CI - run ``python travis/all.py`` to check this.
* Update ``changelog.txt`` and ``docs/Authors.rst`` when applicable. See
`build-changelog` for more information on the changelog format.
* Create a GitHub pull request once finished
* Submit ideas and bug reports as :issue:`issues on GitHub <>`.
Posts in the forum thread can easily get missed or forgotten.
* Work on :issue:`reported problems <?q=is:open+-label:idea>`
will take priority over ideas or suggestions.
.. _contributing-memory-research:
Memory research
---------------
If you want to do memory research, you'll need some tools and some knowledge.
In general, you'll need a good memory viewer and optionally something
to look at machine code without getting crazy :)
Using publicly known information and analyzing the game's data is preferred.
Good Windows tools include:
* IDA Freeware 7.0 (for non-commercial use, supports 32-bit and 64-bit)
* Cheat Engine
Good Linux tools:
* angavrilov's df-structures gui (32-bit only, visit us on IRC for details)
* IDA Freeware 7.0 (see above)
* edb (Evan's Debugger)
* Some of the tools residing in the ``legacy`` dfhack branch.
Using the library as a developer
================================
Currently, the most direct way to use the library is to write a script or plugin that can be loaded by it.
All the plugins can be found in the 'plugins' folder. There's no in-depth documentation
on how to write one yet, but it should be easy enough to copy one and just follow the pattern.
``plugins/skeleton/skeleton.cpp`` is provided for this purpose.
Other than through plugins, it is possible to use DFHack via remote access interface,
or by writing scripts in Lua or Ruby. There are plenty of examples in the scripts folder.
The `lua-api` is quite well documented.
The most important parts of DFHack are the Core, Console, Modules and Plugins.
* Core acts as the centerpiece of DFHack - it acts as a filter between DF and
SDL and synchronizes the various plugins with DF.
* Console is a thread-safe console that can be used to invoke commands exported by Plugins.
* Modules actually describe the way to access information in DF's memory. You
can get them from the Core. Most modules are split into two parts: high-level
and low-level. High-level is mostly method calls, low-level publicly visible
pointers to DF's data structures.
* Plugins are the tools that use all the other stuff to make things happen.
A plugin can have a list of commands that it exports and an onupdate function
that will be called each DF game tick.
Rudimentary API documentation can be built using doxygen (see build options
in ``CMakeCache.txt`` or with ``ccmake`` or ``cmake-gui``). The full DFHack
documentation is built with Sphinx_, which runs automatically at compile time.
.. _Sphinx: http://www.sphinx-doc.org
DFHack consists of variously licensed code, but invariably weak copyleft.
The main license is zlib/libpng, some bits are MIT licensed, and some are
BSD licensed. See the `license` for more information.
Feel free to add your own extensions and plugins. Contributing back to
the DFHack repository is welcome and the right thing to do :)
DF data structure definitions
-----------------------------
DFHack uses information about the game data structures, represented via xml files
in the ``library/xml/`` submodule.
See https://github.com/DFHack/df-structures, and the documentation linked in the index.
Data structure layouts are described in files following the ``df.*.xml`` name pattern.
This information is transformed by a perl script into C++ headers describing the
structures, and associated metadata for the Lua wrapper. These headers and data
are then compiled into the DFHack libraries, thus necessitating a compatibility
break every time layouts change; in return it significantly boosts the efficiency
and capabilities of DFHack code.
Global object addresses are stored in :file:`symbols.xml`, which is copied to the dfhack
release package and loaded as data at runtime.
Remote access interface
-----------------------
DFHack supports remote access by exchanging Google protobuf messages via a TCP
socket. Both the core and plugins can define remotely accessible methods. The
``dfhack-run`` command uses this interface to invoke ordinary console commands.
Currently the supported set of requests is limited, because the developers don't
know what exactly is most useful. `remotefortressreader` provides a fairly
comprehensive interface for visualisers such as :forums:`Armok Vision <146473>`.
Documentation Standards
=======================
DFHack documentation is built with Sphinx_, and configured automatically
through CMake. If you want to build the docs *only*, use this command::
sphinx-build . docs/html
Whether you're adding new code or just fixing old documentation (and there's plenty),
there are a few important standards for completeness and consistent style. Treat
this section as a guide rather than iron law, match the surrounding text, and you'll
be fine.
Each command should have a short (~54 character) help string, which is shown
by the `ls` command. For scripts, this is a comment on the first line
(the comment marker and whitespace is stripped). For plugins it's the second
argument to ``PluginCommand``. Please make this brief but descriptive!
Everything should be documented! If it's not clear *where* a particular
thing should be documented, ask on IRC or in the DFHack thread on Bay12 -
as well as getting help, you'll be providing valuable feedback that
makes it easier for future readers!
Scripts can use a custom autodoc function, based on the Sphinx ``include``
directive - anything between the tokens is copied into the appropriate scripts
documentation page. For Ruby, we follow the built-in docstring convention
(``=begin`` and ``=end``). For Lua, the tokens are ``[====[`` and ``]====]``
- ordinary multi-line strings. It is highly encouraged to reuse this string
as the in-console documentation by (eg.) printing it when a ``-help`` argument
is given.
The docs **must** have a heading which exactly matches the command, underlined
with ``=====`` to the same length. For example, a lua file would have::
local helpstr = [====[
add-thought
===========
Adds a thought or emotion to the selected unit. Can be used by other scripts,
or the gui invoked by running ``add-thought gui`` with a unit selected.
]====]
Where the heading for a section is also the name of a command, the spelling
and case should exactly match the command to enter in the DFHack command line.
Try to keep lines within 80-100 characters, so it's readable in plain text
in the terminal - Sphinx (our documentation system) will make sure
paragraphs flow.
If there aren't many options or examples to show, they can go in a paragraph of
text. Use double-backticks to put commands in monospaced font, like this::
You can use ``cleanowned scattered x`` to dump tattered or abandoned items.
If the command takes more than three arguments, format the list as a table
called Usage. The table *only* lists arguments, not full commands.
Input values are specified in angle brackets. Example::
Usage:
:arg1: A simple argument.
:arg2 <input>: Does something based on the input value.
:Very long argument:
Is very specific.
To demonstrate usage - useful mainly when the syntax is complicated, list the
full command with arguments in monospaced font, then indent the next line and
describe the effect::
``resume all``
Resumes all suspended constructions.
If it would be helpful to mention another DFHack command, don't just type the
name - add a hyperlink! Specify the link target in backticks, and it will be
replaced with the corresponding title and linked: eg ```autolabor```
=> `autolabor`. Link targets should be equivalent to the command
described (without file extension), and placed above the heading of that
section like this::
.. _autolabor:
autolabor
=========
Add link targets if you need them, but otherwise plain headings are preferred.
Scripts have link targets created automatically.
Other ways to help
==================
DFHack is a software project, but there's a lot more to it than programming.
If you're not comfortable programming, you can help by:
* reporting bugs and incomplete documentation
* improving the documentation
* finding third-party scripts to add
* writing tutorials for newbies
All those things are crucial, and often under-represented. So if that's
your thing, go get started!

@ -1,6 +1,6 @@
# DFHack Readme # DFHack Readme
[![Build Status](https://travis-ci.org/DFHack/dfhack.svg?branch=develop)](https://travis-ci.org/DFHack/dfhack) [![Build Status](https://github.com/DFHack/dfhack/workflows/Build/badge.svg?event=push)](https://github.com/DFHack/dfhack/actions?query=workflow%3ABuild)
[![Documentation Status](https://readthedocs.org/projects/dfhack/badge)](https://dfhack.readthedocs.org) [![Documentation Status](https://readthedocs.org/projects/dfhack/badge)](https://dfhack.readthedocs.org)
[![License](https://img.shields.io/badge/license-ZLib-blue.svg)](https://en.wikipedia.org/wiki/Zlib_License) [![License](https://img.shields.io/badge/license-ZLib-blue.svg)](https://en.wikipedia.org/wiki/Zlib_License)

@ -15,14 +15,13 @@ serve to show the default.
# pylint:disable=redefined-builtin # pylint:disable=redefined-builtin
import datetime
from io import open from io import open
import os import os
import re import re
import shlex # pylint:disable=unused-import import shlex # pylint:disable=unused-import
import sys import sys
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'docs'))
from gen_changelog import generate_changelog
# -- Support :dfhack-keybind:`command` ------------------------------------ # -- Support :dfhack-keybind:`command` ------------------------------------
# this is a custom directive that pulls info from dfhack.init-example # this is a custom directive that pulls info from dfhack.init-example
@ -152,9 +151,10 @@ def write_script_docs():
'gui': 'GUI Scripts', 'gui': 'GUI Scripts',
'modtools': 'Scripts for Modders'} 'modtools': 'Scripts for Modders'}
for k in head: for k in head:
title = ('.. _{k}:\n\n{l}\n{t}\n{l}\n\n' title = ('.. _scripts-{k}:\n\n{l}\n{t}\n{l}\n\n'
'.. include:: /scripts/{a}about.txt\n\n' '.. include:: /scripts/{a}about.txt\n\n'
'.. contents::\n\n').format( '.. contents:: Contents\n'
' :local:\n\n').format(
k=k, t=head[k], k=k, t=head[k],
l=len(head[k])*'#', l=len(head[k])*'#',
a=('' if k == 'base' else k + '/') a=('' if k == 'base' else k + '/')
@ -174,41 +174,48 @@ def all_keybinds_documented():
plugin_binds = set(re.findall(':dfhack-keybind:`(.*?)`', f.read())) plugin_binds = set(re.findall(':dfhack-keybind:`(.*?)`', f.read()))
undocumented_binds = configured_binds - script_commands - plugin_binds undocumented_binds = configured_binds - script_commands - plugin_binds
if undocumented_binds: if undocumented_binds:
raise ValueError('The following DFHack commands have undocumented' raise ValueError('The following DFHack commands have undocumented '
'keybindings: {}'.format(sorted(undocumented_binds))) 'keybindings: {}'.format(sorted(undocumented_binds)))
# Actually call the docs generator and run test # Actually call the docs generator and run test
generate_changelog()
write_script_docs() write_script_docs()
all_keybinds_documented() all_keybinds_documented()
# -- General configuration ------------------------------------------------ # -- General configuration ------------------------------------------------
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'docs', 'sphinx_extensions'))
# If your documentation needs a minimal Sphinx version, state it here. # If your documentation needs a minimal Sphinx version, state it here.
needs_sphinx = '1.3' needs_sphinx = '1.8'
# Add any Sphinx extension module names here, as strings. They can be # Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones. # ones.
extensions = ['sphinx.ext.extlinks'] extensions = [
'sphinx.ext.extlinks',
'dfhack.changelog',
'dfhack.lexer',
]
# This config value must be a dictionary of external sites, mapping unique # This config value must be a dictionary of external sites, mapping unique
# short alias names to a base URL and a prefix. # short alias names to a base URL and a prefix.
# See http://sphinx-doc.org/ext/extlinks.html # See http://sphinx-doc.org/ext/extlinks.html
extlinks = { extlinks = {
'wiki': ('http://dwarffortresswiki.org/%s', ''), 'wiki': ('https://dwarffortresswiki.org/%s', ''),
'forums': ('http://www.bay12forums.com/smf/index.php?topic=%s', 'forums': ('http://www.bay12forums.com/smf/index.php?topic=%s',
'Bay12 forums thread '), 'Bay12 forums thread '),
'dffd': ('http://dffd.bay12games.com/file.php?id=%s', 'DFFD file '), 'dffd': ('https://dffd.bay12games.com/file.php?id=%s', 'DFFD file '),
'bug': ('http://www.bay12games.com/dwarves/mantisbt/view.php?id=%s', 'bug': ('https://www.bay12games.com/dwarves/mantisbt/view.php?id=%s',
'Bug '), 'Bug '),
'source': ('https://github.com/DFHack/dfhack/tree/develop/%s', ''),
'source:scripts': ('https://github.com/DFHack/scripts/tree/master/%s', ''),
'issue': ('https://github.com/DFHack/dfhack/issues/%s', 'Issue '), 'issue': ('https://github.com/DFHack/dfhack/issues/%s', 'Issue '),
'commit': ('https://github.com/DFHack/dfhack/commit/%s', 'Commit '), 'commit': ('https://github.com/DFHack/dfhack/commit/%s', 'Commit '),
} }
# Add any paths that contain templates here, relative to this directory. # Add any paths that contain templates here, relative to this directory.
templates_path = [] templates_path = ["docs/templates"]
# The suffix(es) of source filenames. # The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string: # You can specify multiple suffix as a list of string:
@ -222,7 +229,7 @@ master_doc = 'index'
# General information about the project. # General information about the project.
project = 'DFHack' project = 'DFHack'
copyright = '2015, The DFHack Team' copyright = '2015-%d, The DFHack Team' % datetime.datetime.now().year
author = 'The DFHack Team' author = 'The DFHack Team'
# The version info for the project you're documenting, acts as replacement for # The version info for the project you're documenting, acts as replacement for
@ -276,16 +283,25 @@ default_role = 'ref'
# The name of the Pygments (syntax highlighting) style to use. # The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx' pygments_style = 'sphinx'
# The default language to highlight source code in.
highlight_language = 'dfhack'
# If true, `todo` and `todoList` produce output, else they produce nothing. # If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False todo_include_todos = False
rst_prolog = """
.. |sphinx_min_version| replace:: {sphinx_min_version}
.. |dfhack_version| replace:: {dfhack_version}
""".format(
sphinx_min_version=needs_sphinx,
dfhack_version=version,
)
# -- Options for HTML output ---------------------------------------------- # -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for # The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes. # a list of builtin themes.
html_theme = 'alabaster' html_theme = 'alabaster'
html_style = 'dfhack.css'
# Theme options are theme-specific and customize the look and feel of a theme # Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the # further. For a list of options available for each theme, see the
@ -296,6 +312,7 @@ html_theme_options = {
'github_repo': 'dfhack', 'github_repo': 'dfhack',
'github_button': False, 'github_button': False,
'travis_button': False, 'travis_button': False,
'fixed_sidebar': True,
} }
# The name for this set of Sphinx documents. If None, it defaults to # The name for this set of Sphinx documents. If None, it defaults to
@ -335,6 +352,10 @@ html_domain_indices = False
# If false, no index is generated. # If false, no index is generated.
html_use_index = False html_use_index = False
html_css_files = [
'dfhack.css',
]
# -- Options for LaTeX output --------------------------------------------- # -- Options for LaTeX output ---------------------------------------------
# Grouping the document tree into LaTeX files. List of tuples # Grouping the document tree into LaTeX files. List of tuples
@ -344,3 +365,5 @@ latex_documents = [
(master_doc, 'DFHack.tex', 'DFHack Documentation', (master_doc, 'DFHack.tex', 'DFHack Documentation',
'The DFHack Team', 'manual'), 'The DFHack Team', 'manual'),
] ]
latex_toplevel_sectioning = 'part'

@ -0,0 +1,2 @@
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/blueprints/ DESTINATION blueprints)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/quickfort/ DESTINATION "${DFHACK_DATA_DESTINATION}/data/quickfort")

@ -0,0 +1,4 @@
This folder contains blueprints used by the `quickfort` script. For more information, see:
* [Quickfort command reference](https://docs.dfhack.org/en/stable/docs/_auto/base.html#quickfort)
* [Quickfort user guide](https://docs.dfhack.org/en/stable/docs/guides/quickfort-user-guide.html)

@ -0,0 +1,70 @@
"#dig start(11; 12) 28 bedrooms, 3 tiles each (efficient layout)"
# see an image of this blueprint at https://i.imgur.com/XD7D4ux.png
, , , , , ,d, , , , , ,d, , , , , , , , ,#
, , , , , ,d, , , , , ,d, , , , , , , , ,#
, , , ,d, ,d, ,d, ,d, ,d, ,d, , , , , , ,#
, , , ,d, ,d, ,d, ,d, ,d, ,d, , , , , , ,#
, , , ,d,d,d,d,d, ,d,d,d, ,d, ,d,d,d, , ,#
, , , , , ,d, , , , , ,d,d, , ,d, , , , ,#
, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,#
, , , , ,d,d, , , ,d, ,d, , , ,d, , , , ,#
d,d,d,d,d,d,d,d,d,d,d,d,d, ,d, ,d,d,d, , ,#
, , , ,d, , , ,d,i,i,i,d, ,d, , , , , , ,#
, ,d,d,d, ,d,d,d,i,i,i,d,d,d, ,d,d,d, , ,#
, , , , , ,d, ,d,i,i,i,d, , , ,d, , , , ,#
, ,d,d,d, ,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,#
, , , ,d, , , ,d, ,d, , , ,d,d, , , , , ,#
d,d,d,d,d,d,d,d,d, ,d,d,d, ,d, ,d,d,d, , ,#
, , , ,d, , ,d,d, , , , , ,d, , , , , , ,#
, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d,d, , , , ,#
, , , , , ,d, ,d, ,d, ,d, ,d, ,d, , , , ,#
, , , , , ,d, ,d, ,d, ,d, ,d, ,d, , , , ,#
, , , , , , , ,d, , , , , ,d, , , , , , ,#
, , , , , , , ,d, , , , , ,d, , , , , , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
"#build label(furniture) start(11; 11) 28x doors, beds, coffers, and cabinets"
, , , , , ,f, , , , , ,f, , , , , , , , ,#
, , , , , ,h, , , , , ,h, , , , , , , , ,#
, , , ,f, ,b, ,f, ,f, ,b, ,f, , , , , , ,#
, , , ,h, ,d, ,h, ,h, ,d, ,h, , , , , , ,#
, , , ,b,d,`,d,b, ,b,d,`, ,b, ,b,h,f, , ,#
, , , , , ,`, , , , , ,`,d, , ,d, , , , ,#
, ,f,h,b, ,`, ,f,h,b, ,`,`,`,`,`,d,b,h,f,#
, , , , ,d,`, , , ,d, ,`, , , ,d, , , , ,#
f,h,b,d,`,`,`,`,`,`,`,`,`, ,f, ,b,h,f, , ,#
, , , ,d, , , ,`,`,`,`,`, ,h, , , , , , ,#
, ,f,h,b, ,b,d,`,`,`,`,`,d,b, ,b,h,f, , ,#
, , , , , ,h, ,`,`,`,`,`, , , ,d, , , , ,#
, ,f,h,b, ,f, ,`,`,`,`,`,`,`,`,`,d,b,h,f,#
, , , ,d, , , ,`, ,d, , , ,`,d, , , , , ,#
f,h,b,d,`,`,`,`,`, ,b,h,f, ,`, ,b,h,f, , ,#
, , , ,d, , ,d,`, , , , , ,`, , , , , , ,#
, ,f,h,b, ,b, ,`,d,b, ,b,d,`,d,b, , , , ,#
, , , , , ,h, ,d, ,h, ,h, ,d, ,h, , , , ,#
, , , , , ,f, ,b, ,f, ,f, ,b, ,f, , , , ,#
, , , , , , , ,h, , , , , ,h, , , , , , ,#
, , , , , , , ,f, , , , , ,f, , , , , , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#query label(rooms) start(11; 11) room designations
, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,#
, , , , , ,r+,, , , , ,r+,, , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,#
, , , ,r+,, , ,r+,,r+,, , ,r+,,r+,, , , ,#
, , , , , , , , , , , , , , , , , , , , ,#
, , , ,r+,, , , , ,r+,, , , , , , ,r+,, ,#
, , , , , , , , , , , , , , , , , , , , ,#
, ,r+,, , , , , , , , , , , , ,r+,, , , ,#
, , , , , , , , , , , , , , , , , , , , ,#
, , , ,r+,,r+,, , , , , , ,r+,,r+,, , , ,#
, , , , , , , , , , , , , , , , , , , , ,#
, , , ,r+,, , , , , , , , , , , , ,r+,, ,#
, , , , , , , , , , , , , , , , , , , , ,#
, ,r+,, , , , , , ,r+,, , , , ,r+,, , , ,#
, , , , , , , , , , , , , , , , , , , , ,#
, , , ,r+,,r+,, , ,r+,,r+,, , ,r+,, , , ,#
, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , ,r+,, , , , ,r+,, , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
1 #dig start(11; 12) 28 bedrooms, 3 tiles each (efficient layout)
2 # see an image of this blueprint at https://i.imgur.com/XD7D4ux.png
3 , , , , , ,d, , , , , ,d, , , , , , , , ,#
4 , , , , , ,d, , , , , ,d, , , , , , , , ,#
5 , , , ,d, ,d, ,d, ,d, ,d, ,d, , , , , , ,#
6 , , , ,d, ,d, ,d, ,d, ,d, ,d, , , , , , ,#
7 , , , ,d,d,d,d,d, ,d,d,d, ,d, ,d,d,d, , ,#
8 , , , , , ,d, , , , , ,d,d, , ,d, , , , ,#
9 , ,d,d,d, ,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,#
10 , , , , ,d,d, , , ,d, ,d, , , ,d, , , , ,#
11 d,d,d,d,d,d,d,d,d,d,d,d,d, ,d, ,d,d,d, , ,#
12 , , , ,d, , , ,d,i,i,i,d, ,d, , , , , , ,#
13 , ,d,d,d, ,d,d,d,i,i,i,d,d,d, ,d,d,d, , ,#
14 , , , , , ,d, ,d,i,i,i,d, , , ,d, , , , ,#
15 , ,d,d,d, ,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,#
16 , , , ,d, , , ,d, ,d, , , ,d,d, , , , , ,#
17 d,d,d,d,d,d,d,d,d, ,d,d,d, ,d, ,d,d,d, , ,#
18 , , , ,d, , ,d,d, , , , , ,d, , , , , , ,#
19 , ,d,d,d, ,d, ,d,d,d, ,d,d,d,d,d, , , , ,#
20 , , , , , ,d, ,d, ,d, ,d, ,d, ,d, , , , ,#
21 , , , , , ,d, ,d, ,d, ,d, ,d, ,d, , , , ,#
22 , , , , , , , ,d, , , , , ,d, , , , , , ,#
23 , , , , , , , ,d, , , , , ,d, , , , , , ,#
24 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
25 #build label(furniture) start(11; 11) 28x doors, beds, coffers, and cabinets
26 , , , , , ,f, , , , , ,f, , , , , , , , ,#
27 , , , , , ,h, , , , , ,h, , , , , , , , ,#
28 , , , ,f, ,b, ,f, ,f, ,b, ,f, , , , , , ,#
29 , , , ,h, ,d, ,h, ,h, ,d, ,h, , , , , , ,#
30 , , , ,b,d,`,d,b, ,b,d,`, ,b, ,b,h,f, , ,#
31 , , , , , ,`, , , , , ,`,d, , ,d, , , , ,#
32 , ,f,h,b, ,`, ,f,h,b, ,`,`,`,`,`,d,b,h,f,#
33 , , , , ,d,`, , , ,d, ,`, , , ,d, , , , ,#
34 f,h,b,d,`,`,`,`,`,`,`,`,`, ,f, ,b,h,f, , ,#
35 , , , ,d, , , ,`,`,`,`,`, ,h, , , , , , ,#
36 , ,f,h,b, ,b,d,`,`,`,`,`,d,b, ,b,h,f, , ,#
37 , , , , , ,h, ,`,`,`,`,`, , , ,d, , , , ,#
38 , ,f,h,b, ,f, ,`,`,`,`,`,`,`,`,`,d,b,h,f,#
39 , , , ,d, , , ,`, ,d, , , ,`,d, , , , , ,#
40 f,h,b,d,`,`,`,`,`, ,b,h,f, ,`, ,b,h,f, , ,#
41 , , , ,d, , ,d,`, , , , , ,`, , , , , , ,#
42 , ,f,h,b, ,b, ,`,d,b, ,b,d,`,d,b, , , , ,#
43 , , , , , ,h, ,d, ,h, ,h, ,d, ,h, , , , ,#
44 , , , , , ,f, ,b, ,f, ,f, ,b, ,f, , , , ,#
45 , , , , , , , ,h, , , , , ,h, , , , , , ,#
46 , , , , , , , ,f, , , , , ,f, , , , , , ,#
47 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
48 #query label(rooms) start(11; 11) room designations
49 , , , , , , , , , , , , , , , , , , , , ,#
50 , , , , , , , , , , , , , , , , , , , , ,#
51 , , , , , ,r+,, , , , ,r+,, , , , , , , ,#
52 , , , , , , , , , , , , , , , , , , , , ,#
53 , , , ,r+,, , ,r+,,r+,, , ,r+,,r+,, , , ,#
54 , , , , , , , , , , , , , , , , , , , , ,#
55 , , , ,r+,, , , , ,r+,, , , , , , ,r+,, ,#
56 , , , , , , , , , , , , , , , , , , , , ,#
57 , ,r+,, , , , , , , , , , , , ,r+,, , , ,#
58 , , , , , , , , , , , , , , , , , , , , ,#
59 , , , ,r+,,r+,, , , , , , ,r+,,r+,, , , ,#
60 , , , , , , , , , , , , , , , , , , , , ,#
61 , , , ,r+,, , , , , , , , , , , , ,r+,, ,#
62 , , , , , , , , , , , , , , , , , , , , ,#
63 , ,r+,, , , , , , ,r+,, , , , ,r+,, , , ,#
64 , , , , , , , , , , , , , , , , , , , , ,#
65 , , , ,r+,,r+,, , ,r+,,r+,, , ,r+,, , , ,#
66 , , , , , , , , , , , , , , , , , , , , ,#
67 , , , , , , , ,r+,, , , , ,r+,, , , , , ,#
68 , , , , , , , , , , , , , , , , , , , , ,#
69 , , , , , , , , , , , , , , , , , , , , ,#
70 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#

@ -0,0 +1,100 @@
"#dig start(16; 17; central 3x3 stairwell) 48 rooms, 4 tiles each (more aesthetic)"
# see an image of this blueprint at: https://i.imgur.com/3pNc0HM.png
, , , , , , , , , , , , ,d, , , ,d, , , , , , , , , , , , , ,#
, , , ,d, , , ,d, , , ,d,d,d,d,d,d,d, , , ,d, , , ,d, , , , ,#
, , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,#
,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, ,#
d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d,#
,d, , ,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d, , ,d, ,#
,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,#
,d, , ,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d, , ,d, ,#
d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d,#
,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, ,#
, , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,#
, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , , ,#
, ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,#
,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, ,#
, ,d, , ,d,d,d, , ,d, , ,d,i,i,i,d, , ,d, , ,d,d,d, , ,d, , ,#
, ,d,d,d,d,d,d,d,d,d,d,d,d,i,i,i,d,d,d,d,d,d,d,d,d,d,d,d, , ,#
, ,d, , ,d,d,d, , ,d, , ,d,i,i,i,d, , ,d, , ,d,d,d, , ,d, , ,#
,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, ,#
, ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,#
, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , , ,#
, , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,#
,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, ,#
d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d,#
,d, , ,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d, , ,d, ,#
,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,#
,d, , ,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d, , ,d, ,#
d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d,#
,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, ,#
, , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,#
, , , ,d, , , ,d, , , ,d,d,d,d,d,d,d, , , ,d, , , ,d, , , , ,#
, , , , , , , , , , , , ,d, , , ,d, , , , , , , , , , , , , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
"#build label(furniture) start(16; 16; central 3x3 stairwell) 48x doors, beds, cabinets, and coffers; 8x statues"
, , , , , , , , , , , , ,f, , , ,f, , , , , , , , , , , , , ,#
, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , , ,#
, , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,#
,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, ,#
f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f,#
,d, , , , , , , , , ,d, , , , , , , ,d, , , , , , , , , ,d, ,#
, , , , , ,s, , , , , , , , ,s, , , , , , , , ,s, , , , , , ,#
,d, , , , , , , , , ,d, , , , , , , ,d, , , , , , , , , ,d, ,#
f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f,#
,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, ,#
, , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,#
, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , , ,#
, ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,#
,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, ,#
, ,d, , , , , , , ,d, , , , , , , , , ,d, , , , , , , ,d, , ,#
, , , , , ,s, , , , , , , , , , , , , , , , , ,s, , , , , , ,#
, ,d, , , , , , , ,d, , , , , , , , , ,d, , , , , , , ,d, , ,#
,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, ,#
, ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,#
, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , , ,#
, , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,#
,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, ,#
f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f,#
,d, , , , , , , , , ,d, , , , , , , ,d, , , , , , , , , ,d, ,#
, , , , , ,s, , , , , , , , ,s, , , , , , , , ,s, , , , , , ,#
,d, , , , , , , , , ,d, , , , , , , ,d, , , , , , , , , ,d, ,#
f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f,#
,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, ,#
, , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,#
, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , , ,#
, , , , , , , , , , , , ,f, , , ,f, , , , , , , , , , , , , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#query label(rooms) start(16; 16; central 3x3 stairwell) room designations
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , ,#
, , ,r+,, , , , ,r+,, , , , , , , , , , ,r+,, , , , ,r+,, , ,#
,r+,, , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
,r+,, , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,,#
, , ,r+,, , , , ,r+,, , , , , , , , , , ,r+,, , , , ,r+,, , ,#
, , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , ,#
, ,r+,, , , , , , ,r+,, , , , , , , , ,r+,, , , , , , ,r+,, ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, ,r+,, , , , , , ,r+,, , , , , , , , ,r+,, , , , , , ,r+,, ,#
, , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , ,#
, , ,r+,, , , , ,r+,, , , , , , , , , , ,r+,, , , , ,r+,, , ,#
,r+,, , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
,r+,, , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,,#
, , ,r+,, , , , ,r+,, , , , , , , , , , ,r+,, , , , ,r+,, , ,#
, , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
1 #dig start(16; 17; central 3x3 stairwell) 48 rooms, 4 tiles each (more aesthetic)
2 # see an image of this blueprint at: https://i.imgur.com/3pNc0HM.png
3 , , , , , , , , , , , , ,d, , , ,d, , , , , , , , , , , , , ,#
4 , , , ,d, , , ,d, , , ,d,d,d,d,d,d,d, , , ,d, , , ,d, , , , ,#
5 , , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,#
6 ,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, ,#
7 d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d,#
8 ,d, , ,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d, , ,d, ,#
9 ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,#
10 ,d, , ,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d, , ,d, ,#
11 d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d,#
12 ,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, ,#
13 , , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,#
14 , , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , , ,#
15 , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,#
16 ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, ,#
17 , ,d, , ,d,d,d, , ,d, , ,d,i,i,i,d, , ,d, , ,d,d,d, , ,d, , ,#
18 , ,d,d,d,d,d,d,d,d,d,d,d,d,i,i,i,d,d,d,d,d,d,d,d,d,d,d,d, , ,#
19 , ,d, , ,d,d,d, , ,d, , ,d,i,i,i,d, , ,d, , ,d,d,d, , ,d, , ,#
20 ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, ,#
21 , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,#
22 , , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , , ,#
23 , , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,#
24 ,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, ,#
25 d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d,#
26 ,d, , ,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d, , ,d, ,#
27 ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,#
28 ,d, , ,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d, , ,d, ,#
29 d,d,d, , , ,d, , , ,d,d,d, ,d,d,d, ,d,d,d, , , ,d, , , ,d,d,d,#
30 ,d, , ,d, ,d, ,d, , ,d, , , ,d, , , ,d, , ,d, ,d, ,d, , ,d, ,#
31 , , ,d,d,d,d,d,d,d, , , ,d, ,d, ,d, , , ,d,d,d,d,d,d,d, , , ,#
32 , , , ,d, , , ,d, , , ,d,d,d,d,d,d,d, , , ,d, , , ,d, , , , ,#
33 , , , , , , , , , , , , ,d, , , ,d, , , , , , , , , , , , , ,#
34 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
35 #build label(furniture) start(16; 16; central 3x3 stairwell) 48x doors, beds, cabinets, and coffers; 8x statues
36 , , , , , , , , , , , , ,f, , , ,f, , , , , , , , , , , , , ,#
37 , , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , , ,#
38 , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,#
39 ,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, ,#
40 f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f,#
41 ,d, , , , , , , , , ,d, , , , , , , ,d, , , , , , , , , ,d, ,#
42 , , , , , ,s, , , , , , , , ,s, , , , , , , , ,s, , , , , , ,#
43 ,d, , , , , , , , , ,d, , , , , , , ,d, , , , , , , , , ,d, ,#
44 f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f,#
45 ,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, ,#
46 , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,#
47 , , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , , ,#
48 , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,#
49 ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, ,#
50 , ,d, , , , , , , ,d, , , , , , , , , ,d, , , , , , , ,d, , ,#
51 , , , , , ,s, , , , , , , , , , , , , , , , , ,s, , , , , , ,#
52 , ,d, , , , , , , ,d, , , , , , , , , ,d, , , , , , , ,d, , ,#
53 ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, ,#
54 , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,#
55 , , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , , ,#
56 , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,#
57 ,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, ,#
58 f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f,#
59 ,d, , , , , , , , , ,d, , , , , , , ,d, , , , , , , , , ,d, ,#
60 , , , , , ,s, , , , , , , , ,s, , , , , , , , ,s, , , , , , ,#
61 ,d, , , , , , , , , ,d, , , , , , , ,d, , , , , , , , , ,d, ,#
62 f, ,h, , , , , , , ,h, ,f, , , , , ,f, ,h, , , , , , , ,h, ,f,#
63 ,b, , ,f, , , ,f, , ,b, , , , , , , ,b, , ,f, , , ,f, , ,b, ,#
64 , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,#
65 , , , ,h, , , ,h, , , ,b, ,d, ,d, ,b, , , ,h, , , ,h, , , , ,#
66 , , , , , , , , , , , , ,f, , , ,f, , , , , , , , , , , , , ,#
67 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
68 #query label(rooms) start(16; 16; central 3x3 stairwell) room designations
69 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
70 , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , ,#
71 , , ,r+,, , , , ,r+,, , , , , , , , , , ,r+,, , , , ,r+,, , ,#
72 ,r+,, , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,,#
73 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
74 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
75 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
76 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
77 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
78 ,r+,, , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,,#
79 , , ,r+,, , , , ,r+,, , , , , , , , , , ,r+,, , , , ,r+,, , ,#
80 , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , ,#
81 , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,, , , , , , ,r+,, ,#
82 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
83 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
84 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
85 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
86 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
87 , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,, , , , , , ,r+,, ,#
88 , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , ,#
89 , , ,r+,, , , , ,r+,, , , , , , , , , , ,r+,, , , , ,r+,, , ,#
90 ,r+,, , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,,#
91 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
92 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
93 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
94 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
95 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
96 ,r+,, , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , ,r+,,#
97 , , ,r+,, , , , ,r+,, , , , , , , , , , ,r+,, , , , ,r+,, , ,#
98 , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , ,#
99 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
100 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#

@ -0,0 +1,232 @@
"#dig start(36;74) 97 rooms, 9 tiles each (fractal design)"
# see an image of this blueprint at: https://i.imgur.com/ENi5QLX.png
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,d, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , ,d,d,d, , ,d, , , , , , ,d, , , , , , ,d, , , , , , ,d, , , , , , ,d, , ,d,d,d, , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , ,d,d,d, , ,d, , , , , , ,d, , , , , ,d,d,d, , , , , ,d, , , , , , ,d, , ,d,d,d, , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , ,d,d,d, , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,d, , ,d,d,d, , ,d, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , ,d,d,d, ,d,d,d, ,d,d,d, , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , ,d,d,d, , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
, , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
, , , , , , , , , , , ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
, , , , , , , , , , , , ,d, , , , , , ,d,d,d, ,d, ,d,d,d, , , , , ,d,d,d, , , , , ,d,d,d, ,d, ,d,d,d, , , , , , ,d, , , , , , , , , , , , , ,#
, , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , ,#
, , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , ,#
, , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d,d,d, ,d, , , , , , ,d, , ,d,d,d, , ,d, , , , , , ,d, ,d,d,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , ,#
,d,d,d, , ,d, , , , , , ,d, , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , ,d, , , , , , ,d, , ,d,d,d, ,#
,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,#
,d,d,d, , ,d, , , , , , ,d, , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , ,d, , , , , , ,d, , ,d,d,d, ,#
, , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d,d,d, ,d, , , , , , ,d, , ,d,d,d, , ,d, , , , , , ,d, ,d,d,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , ,#
, , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , ,#
, , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , ,#
, , , , , , , , , , , , ,d, , , , , , ,d,d,d, ,d, ,d,d,d, , , , , ,d,d,d, , , , , ,d,d,d, ,d, ,d,d,d, , , , , , ,d, , , , , , , , , , , , , ,#
, , , , , , , , , , , ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
, , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
, , , , , , , , , , , ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , ,d,d,d, , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,d,d, ,d,d,d, ,d,d, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d, ,d,d,d, ,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,i,i,i,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,i,i,i,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,i,i,i,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
"#build label(furniture) start(36;73) 97 doors; 95 beds, coffers, and cabinets; 190 urns; 14 tables, chairs, weapon racks, armor stands, and statues"
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,f,`,n, ,`, ,n,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`,d,`,d,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,n, ,`, ,n,`,h, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,f, ,`, ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,`, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,`, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,f, ,r,b,t, ,`, ,r,b,t, ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`, ,a,`,c, ,`, ,a,`,c, ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,h,s,f, ,`, ,h,s,f, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,`, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,h,`,f, ,f,`,n, ,`, ,n,r,a,h, ,`, ,h,a,r,n, ,`, ,n,`,f, ,h,`,f, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,d,`,b,`,s, ,`, ,s,`,b,`,d,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,n,`,n, ,h,`,n, ,`, ,n,t,c,f, ,`, ,f,c,t,n, ,`, ,n,`,h, ,n,`,n, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , ,f,`,n, , ,d, , , , , , ,`, , , , , , ,`, , , , , , ,`, , , , , , ,d, , ,n,`,f, , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , ,`,b,`,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,`,b,`, , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , ,h,`,n, , ,d, , , , , , ,`, , , , , ,`,`,`, , , , , ,`, , , , , , ,d, , ,n,`,h, , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,n,`,n, ,f,`,n, ,`, ,n,`,f, ,`,`,`, ,f,`,n, ,`, ,n,`,f, ,n,`,n, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,d,`,b,`, ,`,`,`, ,`,b,`,d,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,h,`,f, ,h,`,n, ,`, ,n,`,h, ,`,`,`, ,h,`,n, ,`, ,n,`,h, ,h,`,f, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , ,`,`,`, , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,h,`,f, ,n,`,n, ,f,n, ,`,`,`, ,n,f, ,n,`,n, ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`,b,`, ,b,`,d,`,`,`,d,`,b, ,`,b,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,h,`,f, ,h,n, ,`,`,`, ,n,h, ,h,`,f, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,d, , ,`,`,`, , ,d, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,f,`,n, ,`, ,n,`,f, ,n,`,n, ,`,`,`, ,n,`,n, ,f,`,n, ,`, ,n,`,f, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,`,b,`,d,`,d,`,b,`, ,h,b,f, ,`,`,`, ,h,b,f, ,`,b,`,d,`,d,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,h,`,n, ,`, ,n,`,h, , ,d, , ,`,`,`, , ,d, , ,h,`,n, ,`, ,n,`,h, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,`, , , , , ,n,`,n, ,`,`,`, ,n,`,n, , , , , ,`, , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,h,`,f, ,`, ,h,`,f, ,`,b,`, ,`,`,`, ,`,b,`, ,h,`,f, ,`, ,h,`,f, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,`,b,`, ,`, ,`,b,`, ,h,`,f, ,`,`,`, ,h,`,f, ,`,b,`, ,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,n,`,n, ,`, ,n,`,n, , , , , ,`,`,`, , , , , ,n,`,n, ,`, ,n,`,n, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , ,h,`,f, ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, ,`,`,`, ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, ,h,`,f, , , , , , , , , , , , ,#
, , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, ,`,`,`, ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , ,#
, , , , , , , , , , , ,n,`,n, ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, ,`,`,`, ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, ,n,`,n, , , , , , , , , , , , ,#
, , , , , , , , , , , , ,d, , , , , , ,n,`,n, ,`, ,n,`,n, , , , , ,`,`,`, , , , , ,n,`,n, ,`, ,n,`,n, , , , , , ,d, , , , , , , , , , , , , ,#
, , , , ,h,`,f, ,f,`,n, ,`, ,n,r,a,h, ,r,b,t, ,`, ,`,b,`, ,h,b,f, ,`,`,`, ,h,b,f, ,`,b,`, ,`, ,r,b,t, ,h,a,r,n, ,`, ,n,`,f, ,h,`,f, , , , , ,#
, , , , ,`,b,`, ,`,b,`,d,`,d,`,b,`,s, ,a,`,c, ,`, ,h,`,f, ,n,`,n, ,`,`,`, ,n,`,n, ,h,`,f, ,`, ,a,`,c, ,s,`,b,`,d,`,d,`,b,`, ,`,b,`, , , , , ,#
, , , , ,n,`,n, ,h,`,n, ,`, ,n,t,c,f, ,h,s,f, ,`, , , , , , ,d, , ,`,`,`, , ,d, , , , , , ,`, ,h,s,f, ,f,c,t,n, ,`, ,n,`,h, ,n,`,n, , , , , ,#
,f,`,n, , ,d, , , , , , ,`, , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , ,`, , , , , , ,d, , ,n,`,f, ,#
,`,b,`,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,`,b,`, ,#
,h,`,n, , ,d, , , , , , ,`, , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , ,`, , , , , , ,d, , ,n,`,h, ,#
, , , , ,n,`,n, ,f,`,n, ,`, ,n,r,a,h, ,h,s,f, ,`, , , , , , ,d, , ,`,`,`, , ,d, , , , , , ,`, ,h,s,f, ,h,a,r,n, ,`, ,n,`,f, ,n,`,n, , , , , ,#
, , , , ,`,b,`, ,`,b,`,d,`,d,`,b,`,s, ,a,`,c, ,`, ,h,`,f, ,n,`,n, ,`,`,`, ,n,`,n, ,h,`,f, ,`, ,a,`,c, ,s,`,b,`,d,`,d,`,b,`, ,`,b,`, , , , , ,#
, , , , ,h,`,f, ,h,`,n, ,`, ,n,t,c,f, ,r,b,t, ,`, ,`,b,`, ,h,b,f, ,`,`,`, ,h,b,f, ,`,b,`, ,`, ,r,b,t, ,f,c,t,n, ,`, ,n,`,h, ,h,`,f, , , , , ,#
, , , , , , , , , , , , ,d, , , , , , ,n,`,n, ,`, ,n,`,n, , , , , ,`,`,`, , , , , ,n,`,n, ,`, ,n,`,n, , , , , , ,d, , , , , , , , , , , , , ,#
, , , , , , , , , , , ,n,`,n, ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, ,`,`,`, ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, ,n,`,n, , , , , , , , , , , , ,#
, , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, ,`,`,`, ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , ,#
, , , , , , , , , , , ,h,`,f, ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, ,`,`,`, ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, ,h,`,f, , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,n,`,n, ,`, ,n,`,n, , , , , ,`,`,`, , , , , ,n,`,n, ,`, ,n,`,n, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,`,b,`, ,`, ,`,b,`, ,h,s,f, ,`,`,`, ,h,s,f, ,`,b,`, ,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,h,`,f, ,`, ,h,`,f, ,a,`,c, ,`,`,`, ,a,`,c, ,h,`,f, ,`, ,h,`,f, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,`, , , , , ,r,b,t,d,`,`,`,d,r,b,t, , , , , ,`, , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,f,`,n, ,`, ,n,`,f, ,n,`,n, ,`,`,`, ,n,`,n, ,f,`,n, ,`, ,n,`,f, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,`,b,`,d,`,d,`,b,`, , ,d, , ,`,`,`, , ,d, , ,`,b,`,d,`,d,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , ,h,`,n, ,`, ,n,`,h, ,`,`,`, ,`,`,`, ,`,`,`, ,h,`,n, ,`, ,n,`,h, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,`,`, ,`,`,`, ,`,`, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,f,`,n, ,`,`, ,`,`,`, ,`,`, ,n,`,f, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,`, ,`,`,`, ,`,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , ,h,`,f, ,h,`,n, ,`,`, ,`,`,`, ,`,`, ,n,`,h, ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,`,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#query label(rooms) start(36;73) message(use burial script to mark urns as usable) room designations
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,r+,, , ,r+,, ,r+,, , , , , , ,r+,, ,r+,, , ,r+,, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
, , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,~,~,~, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,~,~,~, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,~,~,~, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
1 #dig start(36;74) 97 rooms, 9 tiles each (fractal design)
2 # see an image of this blueprint at: https://i.imgur.com/ENi5QLX.png
3 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
4 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
5 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
6 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
7 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
8 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
9 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
10 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
11 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
12 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
13 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
14 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
15 , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
16 , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
17 , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
18 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
19 , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
20 , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
21 , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
22 , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,d, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
23 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
24 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
25 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
26 , , , , , , , , , , , , , , , ,d,d,d, , ,d, , , , , , ,d, , , , , , ,d, , , , , , ,d, , , , , , ,d, , ,d,d,d, , , , , , , , , , , , , , , , ,#
27 , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , ,#
28 , , , , , , , , , , , , , , , ,d,d,d, , ,d, , , , , , ,d, , , , , ,d,d,d, , , , , ,d, , , , , , ,d, , ,d,d,d, , , , , , , , , , , , , , , , ,#
29 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
30 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
31 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
32 , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , ,d,d,d, , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
33 , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
34 , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
35 , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
36 , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,d, , ,d,d,d, , ,d, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
37 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
38 , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
39 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
40 , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , ,d,d,d, ,d,d,d, ,d,d,d, , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
41 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
42 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
43 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , ,d,d,d, , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
44 , , , , , , , , , , , ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
45 , , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
46 , , , , , , , , , , , ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
47 , , , , , , , , , , , , ,d, , , , , , ,d,d,d, ,d, ,d,d,d, , , , , ,d,d,d, , , , , ,d,d,d, ,d, ,d,d,d, , , , , , ,d, , , , , , , , , , , , , ,#
48 , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , ,#
49 , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , ,#
50 , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d,d,d, ,d, , , , , , ,d, , ,d,d,d, , ,d, , , , , , ,d, ,d,d,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , ,#
51 ,d,d,d, , ,d, , , , , , ,d, , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , ,d, , , , , , ,d, , ,d,d,d, ,#
52 ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,#
53 ,d,d,d, , ,d, , , , , , ,d, , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , ,d, , , , , , ,d, , ,d,d,d, ,#
54 , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d,d,d, ,d, , , , , , ,d, , ,d,d,d, , ,d, , , , , , ,d, ,d,d,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , ,#
55 , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , ,#
56 , , , , ,d,d,d, ,d,d,d, ,d, ,d,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, ,d,d,d,d, ,d, ,d,d,d, ,d,d,d, , , , , ,#
57 , , , , , , , , , , , , ,d, , , , , , ,d,d,d, ,d, ,d,d,d, , , , , ,d,d,d, , , , , ,d,d,d, ,d, ,d,d,d, , , , , , ,d, , , , , , , , , , , , , ,#
58 , , , , , , , , , , , ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
59 , , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,d,d,d, ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
60 , , , , , , , , , , , ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, ,d,d,d, , ,d, , ,d, , ,d, , ,d,d,d, ,d,d,d, , , , , , , , , , , , ,#
61 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, , , , , ,d,d,d, , , , , ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
62 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
63 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
64 , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
65 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
66 , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d, , ,d, , ,d,d,d, , ,d, , ,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
67 , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d,d,d, ,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , ,#
68 , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,d,d, ,d,d,d, ,d,d, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
69 , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
70 , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d,d,d,d, ,d,d,d, ,d,d,d,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
71 , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d, ,d,d,d, ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , ,#
72 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d,d,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
73 , , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , ,#
74 , , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,i,i,i,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , ,#
75 , , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,i,i,i,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , ,#
76 , , , , , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,i,i,i,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , , , , , ,#
77 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
78 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
79 #build label(furniture) start(36;73) 97 doors; 95 beds, coffers, and cabinets; 190 urns; 14 tables, chairs, weapon racks, armor stands, and statues
80 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
81 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
82 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
83 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
84 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
85 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,f,`,n, ,`, ,n,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
86 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`,d,`,d,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
87 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,n, ,`, ,n,`,h, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
88 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
89 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,f, ,`, ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
90 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
91 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,`, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
92 , , , , , , , , , , , , , , , , , , , , , , , , , , ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
93 , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
94 , , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
95 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,`, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
96 , , , , , , , , , , , , , , , , , , , , , , , , , , ,h,`,f, ,r,b,t, ,`, ,r,b,t, ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
97 , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,b,`, ,a,`,c, ,`, ,a,`,c, ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
98 , , , , , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,h,s,f, ,`, ,h,s,f, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
99 , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,`, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
100 , , , , , , , , , , , , , , , , , , , ,h,`,f, ,f,`,n, ,`, ,n,r,a,h, ,`, ,h,a,r,n, ,`, ,n,`,f, ,h,`,f, , , , , , , , , , , , , , , , , , , , ,#
101 , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,d,`,b,`,s, ,`, ,s,`,b,`,d,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
102 , , , , , , , , , , , , , , , , , , , ,n,`,n, ,h,`,n, ,`, ,n,t,c,f, ,`, ,f,c,t,n, ,`, ,n,`,h, ,n,`,n, , , , , , , , , , , , , , , , , , , , ,#
103 , , , , , , , , , , , , , , , ,f,`,n, , ,d, , , , , , ,`, , , , , , ,`, , , , , , ,`, , , , , , ,d, , ,n,`,f, , , , , , , , , , , , , , , , ,#
104 , , , , , , , , , , , , , , , ,`,b,`,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,`,b,`, , , , , , , , , , , , , , , , ,#
105 , , , , , , , , , , , , , , , ,h,`,n, , ,d, , , , , , ,`, , , , , ,`,`,`, , , , , ,`, , , , , , ,d, , ,n,`,h, , , , , , , , , , , , , , , , ,#
106 , , , , , , , , , , , , , , , , , , , ,n,`,n, ,f,`,n, ,`, ,n,`,f, ,`,`,`, ,f,`,n, ,`, ,n,`,f, ,n,`,n, , , , , , , , , , , , , , , , , , , , ,#
107 , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,d,`,b,`, ,`,`,`, ,`,b,`,d,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
108 , , , , , , , , , , , , , , , , , , , ,h,`,f, ,h,`,n, ,`, ,n,`,h, ,`,`,`, ,h,`,n, ,`, ,n,`,h, ,h,`,f, , , , , , , , , , , , , , , , , , , , ,#
109 , , , , , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , ,`,`,`, , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
110 , , , , , , , , , , , , , , , , , , , , , , ,h,`,f, ,n,`,n, ,f,n, ,`,`,`, ,n,f, ,n,`,n, ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , ,#
111 , , , , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`,b,`, ,b,`,d,`,`,`,d,`,b, ,`,b,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , ,#
112 , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,h,`,f, ,h,n, ,`,`,`, ,n,h, ,h,`,f, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , ,#
113 , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,d, , ,`,`,`, , ,d, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
114 , , , , , , , , , , , , , , , , , , , ,f,`,n, ,`, ,n,`,f, ,n,`,n, ,`,`,`, ,n,`,n, ,f,`,n, ,`, ,n,`,f, , , , , , , , , , , , , , , , , , , , ,#
115 , , , , , , , , , , , , , , , , , , , ,`,b,`,d,`,d,`,b,`, ,h,b,f, ,`,`,`, ,h,b,f, ,`,b,`,d,`,d,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
116 , , , , , , , , , , , , , , , , , , , ,h,`,n, ,`, ,n,`,h, , ,d, , ,`,`,`, , ,d, , ,h,`,n, ,`, ,n,`,h, , , , , , , , , , , , , , , , , , , , ,#
117 , , , , , , , , , , , , , , , , , , , , , , , ,`, , , , , ,n,`,n, ,`,`,`, ,n,`,n, , , , , ,`, , , , , , , , , , , , , , , , , , , , , , , , ,#
118 , , , , , , , , , , , , , , , , , , , ,h,`,f, ,`, ,h,`,f, ,`,b,`, ,`,`,`, ,`,b,`, ,h,`,f, ,`, ,h,`,f, , , , , , , , , , , , , , , , , , , , ,#
119 , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`, ,`,b,`, ,h,`,f, ,`,`,`, ,h,`,f, ,`,b,`, ,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
120 , , , , , , , , , , , , , , , , , , , ,n,`,n, ,`, ,n,`,n, , , , , ,`,`,`, , , , , ,n,`,n, ,`, ,n,`,n, , , , , , , , , , , , , , , , , , , , ,#
121 , , , , , , , , , , , ,h,`,f, ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, ,`,`,`, ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, ,h,`,f, , , , , , , , , , , , ,#
122 , , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, ,`,`,`, ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , ,#
123 , , , , , , , , , , , ,n,`,n, ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, ,`,`,`, ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, ,n,`,n, , , , , , , , , , , , ,#
124 , , , , , , , , , , , , ,d, , , , , , ,n,`,n, ,`, ,n,`,n, , , , , ,`,`,`, , , , , ,n,`,n, ,`, ,n,`,n, , , , , , ,d, , , , , , , , , , , , , ,#
125 , , , , ,h,`,f, ,f,`,n, ,`, ,n,r,a,h, ,r,b,t, ,`, ,`,b,`, ,h,b,f, ,`,`,`, ,h,b,f, ,`,b,`, ,`, ,r,b,t, ,h,a,r,n, ,`, ,n,`,f, ,h,`,f, , , , , ,#
126 , , , , ,`,b,`, ,`,b,`,d,`,d,`,b,`,s, ,a,`,c, ,`, ,h,`,f, ,n,`,n, ,`,`,`, ,n,`,n, ,h,`,f, ,`, ,a,`,c, ,s,`,b,`,d,`,d,`,b,`, ,`,b,`, , , , , ,#
127 , , , , ,n,`,n, ,h,`,n, ,`, ,n,t,c,f, ,h,s,f, ,`, , , , , , ,d, , ,`,`,`, , ,d, , , , , , ,`, ,h,s,f, ,f,c,t,n, ,`, ,n,`,h, ,n,`,n, , , , , ,#
128 ,f,`,n, , ,d, , , , , , ,`, , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , ,`, , , , , , ,d, , ,n,`,f, ,#
129 ,`,b,`,d,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,d,`,b,`, ,#
130 ,h,`,n, , ,d, , , , , , ,`, , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , ,`, , , , , , ,d, , ,n,`,h, ,#
131 , , , , ,n,`,n, ,f,`,n, ,`, ,n,r,a,h, ,h,s,f, ,`, , , , , , ,d, , ,`,`,`, , ,d, , , , , , ,`, ,h,s,f, ,h,a,r,n, ,`, ,n,`,f, ,n,`,n, , , , , ,#
132 , , , , ,`,b,`, ,`,b,`,d,`,d,`,b,`,s, ,a,`,c, ,`, ,h,`,f, ,n,`,n, ,`,`,`, ,n,`,n, ,h,`,f, ,`, ,a,`,c, ,s,`,b,`,d,`,d,`,b,`, ,`,b,`, , , , , ,#
133 , , , , ,h,`,f, ,h,`,n, ,`, ,n,t,c,f, ,r,b,t, ,`, ,`,b,`, ,h,b,f, ,`,`,`, ,h,b,f, ,`,b,`, ,`, ,r,b,t, ,f,c,t,n, ,`, ,n,`,h, ,h,`,f, , , , , ,#
134 , , , , , , , , , , , , ,d, , , , , , ,n,`,n, ,`, ,n,`,n, , , , , ,`,`,`, , , , , ,n,`,n, ,`, ,n,`,n, , , , , , ,d, , , , , , , , , , , , , ,#
135 , , , , , , , , , , , ,n,`,n, ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, ,`,`,`, ,f,`,n, , ,d, , ,`, , ,d, , ,n,`,f, ,n,`,n, , , , , , , , , , , , ,#
136 , , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, ,`,`,`, ,`,b,`,d,`,`,`,`,`,`,`,`,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , ,#
137 , , , , , , , , , , , ,h,`,f, ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, ,`,`,`, ,h,`,n, , ,d, , ,`, , ,d, , ,n,`,h, ,h,`,f, , , , , , , , , , , , ,#
138 , , , , , , , , , , , , , , , , , , , ,n,`,n, ,`, ,n,`,n, , , , , ,`,`,`, , , , , ,n,`,n, ,`, ,n,`,n, , , , , , , , , , , , , , , , , , , , ,#
139 , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`, ,`,b,`, ,h,s,f, ,`,`,`, ,h,s,f, ,`,b,`, ,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
140 , , , , , , , , , , , , , , , , , , , ,h,`,f, ,`, ,h,`,f, ,a,`,c, ,`,`,`, ,a,`,c, ,h,`,f, ,`, ,h,`,f, , , , , , , , , , , , , , , , , , , , ,#
141 , , , , , , , , , , , , , , , , , , , , , , , ,`, , , , , ,r,b,t,d,`,`,`,d,r,b,t, , , , , ,`, , , , , , , , , , , , , , , , , , , , , , , , ,#
142 , , , , , , , , , , , , , , , , , , , ,f,`,n, ,`, ,n,`,f, ,n,`,n, ,`,`,`, ,n,`,n, ,f,`,n, ,`, ,n,`,f, , , , , , , , , , , , , , , , , , , , ,#
143 , , , , , , , , , , , , , , , , , , , ,`,b,`,d,`,d,`,b,`, , ,d, , ,`,`,`, , ,d, , ,`,b,`,d,`,d,`,b,`, , , , , , , , , , , , , , , , , , , , ,#
144 , , , , , , , , , , , , , , , , , , , ,h,`,n, ,`, ,n,`,h, ,`,`,`, ,`,`,`, ,`,`,`, ,h,`,n, ,`, ,n,`,h, , , , , , , , , , , , , , , , , , , , ,#
145 , , , , , , , , , , , , , , , , , , , , , , , ,d, , , , , , ,`,`, ,`,`,`, ,`,`, , , , , , ,d, , , , , , , , , , , , , , , , , , , , , , , , ,#
146 , , , , , , , , , , , , , , , , , , , , , , ,n,`,n, ,f,`,n, ,`,`, ,`,`,`, ,`,`, ,n,`,f, ,n,`,n, , , , , , , , , , , , , , , , , , , , , , , ,#
147 , , , , , , , , , , , , , , , , , , , , , , ,`,b,`, ,`,b,`,d,`,`, ,`,`,`, ,`,`,d,`,b,`, ,`,b,`, , , , , , , , , , , , , , , , , , , , , , , ,#
148 , , , , , , , , , , , , , , , , , , , , , , ,h,`,f, ,h,`,n, ,`,`, ,`,`,`, ,`,`, ,n,`,h, ,h,`,f, , , , , , , , , , , , , , , , , , , , , , , ,#
149 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,`,`,`, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
150 , , , , , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , , , , , ,#
151 , , , , , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , , , , , ,#
152 , , , , , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , , , , , ,#
153 , , , , , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , , , , , ,#
154 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
155 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
156 #query label(rooms) start(36;73) message(use burial script to mark urns as usable) room designations
157 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
158 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
159 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
160 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
161 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
162 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
163 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
164 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
165 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
166 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
167 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
168 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
169 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
170 , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
171 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
172 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
173 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
174 , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
175 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
176 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
177 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
178 , , , , , , , , , , , , , , , , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
179 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
180 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
181 , , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , , , , , , , , , , , ,#
182 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
183 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
184 , , , , , , , , , , , , , , , , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
185 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
186 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
187 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
188 , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , ,r+,, ,r+,, , , , , , ,r+,, ,r+,, , ,r+,, , , , , , , , , , , , , , , , , , , , , , , ,#
189 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
190 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
191 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
192 , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
193 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
194 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
195 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
196 , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
197 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
198 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
199 , , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,#
200 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
201 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
202 , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
203 , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , ,#
204 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
205 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
206 , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, ,#
207 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
208 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
209 , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , ,#
210 , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , ,r+,, , , , , , ,r+,, , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
211 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
212 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
213 , , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,#
214 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
215 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
216 , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
217 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
218 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , , , , , ,r+,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
219 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
220 , , , , , , , , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , ,r+,, , , , ,r+,, , , , , , , , , , , , , , , , , , , , ,#
221 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
222 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
223 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
224 , , , , , , , , , , , , , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , ,r+,, , ,r+,, , , , , , , , , , , , , , , , , , , , , , , ,#
225 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
226 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
227 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
228 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,~,~,~, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
229 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,~,~,~, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
230 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,~,~,~, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
231 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
232 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#

File diff suppressed because it is too large Load Diff

@ -0,0 +1,17 @@
#build label(workshops) start(8;2;center of wagon) basic post embark workshops
`,` ,`,`,` ,`,~,~,~,`,` ,`,`,` ,`,#
`,wc,`,`,wt,`,~,~,~,`,wm,`,`,wr,`,#
`,` ,`,`,` ,`,~,~,~,`,` ,`,`,` ,`,#
#,# ,#,#,# ,#,#,#,#,#,# ,#,#,# ,#,#
#place label(stockpiles) basic post embark stockpiles
w(5x10), , , , ,s(5x1) , , , , ,p(5x1), , , , ,#
, , , , ,g(5x4) , , , , ,d(5x1), , , , ,#
, , , , , , , , , ,f(5x3), , , , ,#
, , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , ,#
, , , , ,u(10x5), , , , , , , , , ,#
, , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , ,#
# ,#,#,#,#,# ,#,#,#,#,# ,#,#,#,#,#
1 #build label(workshops) start(8;2;center of wagon) basic post embark workshops
2 `,` ,`,`,` ,`,~,~,~,`,` ,`,`,` ,`,#
3 `,wc,`,`,wt,`,~,~,~,`,wm,`,`,wr,`,#
4 `,` ,`,`,` ,`,~,~,~,`,` ,`,`,` ,`,#
5 #,# ,#,#,# ,#,#,#,#,#,# ,#,#,# ,#,#
6 #place label(stockpiles) basic post embark stockpiles
7 w(5x10), , , , ,s(5x1) , , , , ,p(5x1), , , , ,#
8 , , , , ,g(5x4) , , , , ,d(5x1), , , , ,#
9 , , , , , , , , , ,f(5x3), , , , ,#
10 , , , , , , , , , , , , , , ,#
11 , , , , , , , , , , , , , , ,#
12 , , , , ,u(10x5), , , , , , , , , ,#
13 , , , , , , , , , , , , , , ,#
14 , , , , , , , , , , , , , , ,#
15 , , , , , , , , , , , , , , ,#
16 , , , , , , , , , , , , , , ,#
17 # ,#,#,#,#,# ,#,#,#,#,# ,#,#,#,#,#

@ -0,0 +1,43 @@
#dig diagonal interconnecting tunnels with stairs at intersections
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
, ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
, , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
, , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
, , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , ,#
, , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
, , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
, ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
, ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
, , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
, , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
, , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , ,#
, , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
, , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
, ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
, ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
, , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
, , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
, , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , ,#
, , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
, , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
, ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
, ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
, , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
, , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
, , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , ,#
, , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
, , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
, ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
1 #dig diagonal interconnecting tunnels with stairs at intersections
2 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
3 ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
4 , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
5 , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
6 , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
7 , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , ,#
8 , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
9 , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
10 , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
11 ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
12 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
13 ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
14 , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
15 , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
16 , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
17 , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , ,#
18 , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
19 , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
20 , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
21 ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
22 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
23 ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
24 , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
25 , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
26 , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
27 , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , ,#
28 , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
29 , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
30 , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
31 ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
32 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
33 ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
34 , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
35 , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
36 , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
37 , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , , , , , ,i, , , , , ,#
38 , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , ,#
39 , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , ,#
40 , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , , ,d, , , , , ,d, , ,#
41 ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,d, , , , , , , ,d, ,#
42 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d,#
43 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#

@ -0,0 +1,52 @@
#dig paths every 10 units
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
1 #dig paths every 10 units
2 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
3 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
4 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
5 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
6 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
7 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
8 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
9 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
10 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
11 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
12 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
13 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
14 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
15 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
16 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
17 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
18 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
19 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
20 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
21 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
22 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
23 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
24 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
25 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
26 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
27 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
28 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
29 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
30 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
31 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
32 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
33 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
34 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
35 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
36 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
37 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
38 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
39 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
40 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
41 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
42 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d
43 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
44 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
45 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
46 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
47 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
48 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
49 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
50 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
51 d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d, , , , , , , , , ,d
52 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d

@ -0,0 +1,42 @@
#dig mineshafts as stairs every 3rd tile
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
1 #dig mineshafts as stairs every 3rd tile
2 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
3 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
4 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
5 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
6 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
7 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
8 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
9 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
10 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
11 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
12 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
13 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
14 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
15 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
16 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
17 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
18 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
19 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
20 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
21 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
22 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
23 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
24 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
25 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
26 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
27 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
28 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
29 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
30 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
31 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
32 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
33 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
34 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
35 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
36 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
37 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
38 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
39 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
40 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#
41 i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,i, , ,#
42 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#

@ -0,0 +1,201 @@
#dig start(200;1) marks a diagonal line down and left starting at the cursor
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,md
,,,,,,,,,,,,,md
,,,,,,,,,,,,md
,,,,,,,,,,,md
,,,,,,,,,,md
,,,,,,,,,md
,,,,,,,,md
,,,,,,,md
,,,,,,md
,,,,,md
,,,,md
,,,md
,,md
,md
md
1 #dig start(200;1) marks a diagonal line down and left starting at the cursor
2 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
3 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
4 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
5 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
6 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
7 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
8 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
9 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
10 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
11 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
12 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
13 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
14 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
15 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
16 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
17 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
18 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
19 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
20 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
21 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
22 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
23 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
24 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
25 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
26 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
27 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
28 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
29 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
30 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
31 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
32 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
33 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
34 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
35 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
36 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
37 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
38 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
39 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
40 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
41 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
42 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
43 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
44 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
45 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
46 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
47 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
48 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
49 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
50 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
51 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
52 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
53 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
54 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
55 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
56 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
57 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
58 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
59 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
60 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
61 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
62 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
63 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
64 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
65 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
66 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
67 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
68 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
69 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
70 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
71 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
72 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
73 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
74 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
75 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
76 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
77 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
78 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
79 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
80 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
81 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
82 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
83 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
84 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
85 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
86 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
87 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
88 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
89 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
90 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
91 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
92 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
93 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
94 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
95 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
96 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
97 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
98 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
99 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
100 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
101 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
102 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
103 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
104 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
105 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
106 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
107 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
108 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
109 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
110 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
111 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
112 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
113 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
114 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
115 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
116 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
117 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
118 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
119 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
120 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
121 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
122 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
123 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
124 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
125 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
126 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
127 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
128 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
129 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
130 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
131 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
132 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
133 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
134 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
135 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
136 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
137 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
138 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
139 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
140 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
141 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
142 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
143 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
144 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
145 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
146 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
147 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
148 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
149 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
150 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
151 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
152 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
153 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
154 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
155 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
156 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
157 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
158 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
159 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
160 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
161 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
162 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
163 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
164 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
165 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
166 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
167 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
168 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
169 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
170 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
171 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
172 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
173 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
174 ,,,,,,,,,,,,,,,,,,,,,,,,,,,md
175 ,,,,,,,,,,,,,,,,,,,,,,,,,,md
176 ,,,,,,,,,,,,,,,,,,,,,,,,,md
177 ,,,,,,,,,,,,,,,,,,,,,,,,md
178 ,,,,,,,,,,,,,,,,,,,,,,,md
179 ,,,,,,,,,,,,,,,,,,,,,,md
180 ,,,,,,,,,,,,,,,,,,,,,md
181 ,,,,,,,,,,,,,,,,,,,,md
182 ,,,,,,,,,,,,,,,,,,,md
183 ,,,,,,,,,,,,,,,,,,md
184 ,,,,,,,,,,,,,,,,,md
185 ,,,,,,,,,,,,,,,,md
186 ,,,,,,,,,,,,,,,md
187 ,,,,,,,,,,,,,,md
188 ,,,,,,,,,,,,,md
189 ,,,,,,,,,,,,md
190 ,,,,,,,,,,,md
191 ,,,,,,,,,,md
192 ,,,,,,,,,md
193 ,,,,,,,,md
194 ,,,,,,,md
195 ,,,,,,md
196 ,,,,,md
197 ,,,,md
198 ,,,md
199 ,,md
200 ,md
201 md

@ -0,0 +1,201 @@
#dig start(1;1) marks a diagonal line down and right starting at the cursor
md
,md
,,md
,,,md
,,,,md
,,,,,md
,,,,,,md
,,,,,,,md
,,,,,,,,md
,,,,,,,,,md
,,,,,,,,,,md
,,,,,,,,,,,md
,,,,,,,,,,,,md
,,,,,,,,,,,,,md
,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
1 #dig start(1;1) marks a diagonal line down and right starting at the cursor
2 md
3 ,md
4 ,,md
5 ,,,md
6 ,,,,md
7 ,,,,,md
8 ,,,,,,md
9 ,,,,,,,md
10 ,,,,,,,,md
11 ,,,,,,,,,md
12 ,,,,,,,,,,md
13 ,,,,,,,,,,,md
14 ,,,,,,,,,,,,md
15 ,,,,,,,,,,,,,md
16 ,,,,,,,,,,,,,,md
17 ,,,,,,,,,,,,,,,md
18 ,,,,,,,,,,,,,,,,md
19 ,,,,,,,,,,,,,,,,,md
20 ,,,,,,,,,,,,,,,,,,md
21 ,,,,,,,,,,,,,,,,,,,md
22 ,,,,,,,,,,,,,,,,,,,,md
23 ,,,,,,,,,,,,,,,,,,,,,md
24 ,,,,,,,,,,,,,,,,,,,,,,md
25 ,,,,,,,,,,,,,,,,,,,,,,,md
26 ,,,,,,,,,,,,,,,,,,,,,,,,md
27 ,,,,,,,,,,,,,,,,,,,,,,,,,md
28 ,,,,,,,,,,,,,,,,,,,,,,,,,,md
29 ,,,,,,,,,,,,,,,,,,,,,,,,,,,md
30 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
31 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
32 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
33 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
34 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
35 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
36 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
37 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
38 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
39 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
40 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
41 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
42 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
43 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
44 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
45 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
46 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
47 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
48 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
49 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
50 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
51 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
52 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
53 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
54 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
55 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
56 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
57 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
58 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
59 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
60 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
61 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
62 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
63 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
64 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
65 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
66 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
67 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
68 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
69 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
70 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
71 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
72 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
73 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
74 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
75 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
76 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
77 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
78 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
79 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
80 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
81 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
82 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
83 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
84 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
85 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
86 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
87 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
88 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
89 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
90 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
91 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
92 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
93 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
94 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
95 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
96 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
97 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
98 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
99 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
100 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
101 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
102 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
103 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
104 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
105 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
106 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
107 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
108 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
109 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
110 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
111 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
112 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
113 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
114 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
115 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
116 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
117 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
118 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
119 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
120 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
121 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
122 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
123 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
124 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
125 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
126 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
127 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
128 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
129 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
130 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
131 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
132 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
133 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
134 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
135 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
136 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
137 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
138 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
139 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
140 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
141 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
142 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
143 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
144 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
145 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
146 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
147 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
148 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
149 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
150 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
151 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
152 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
153 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
154 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
155 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
156 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
157 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
158 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
159 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
160 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
161 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
162 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
163 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
164 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
165 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
166 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
167 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
168 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
169 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
170 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
171 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
172 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
173 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
174 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
175 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
176 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
177 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
178 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
179 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
180 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
181 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
182 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
183 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
184 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
185 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
186 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
187 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
188 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
189 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
190 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
191 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
192 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
193 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
194 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
195 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
196 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
197 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
198 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
199 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
200 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
201 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md

@ -0,0 +1,201 @@
#dig start(200;200) marks a diagonal line up and left starting at the cursor
md
,md
,,md
,,,md
,,,,md
,,,,,md
,,,,,,md
,,,,,,,md
,,,,,,,,md
,,,,,,,,,md
,,,,,,,,,,md
,,,,,,,,,,,md
,,,,,,,,,,,,md
,,,,,,,,,,,,,md
,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
1 #dig start(200;200) marks a diagonal line up and left starting at the cursor
2 md
3 ,md
4 ,,md
5 ,,,md
6 ,,,,md
7 ,,,,,md
8 ,,,,,,md
9 ,,,,,,,md
10 ,,,,,,,,md
11 ,,,,,,,,,md
12 ,,,,,,,,,,md
13 ,,,,,,,,,,,md
14 ,,,,,,,,,,,,md
15 ,,,,,,,,,,,,,md
16 ,,,,,,,,,,,,,,md
17 ,,,,,,,,,,,,,,,md
18 ,,,,,,,,,,,,,,,,md
19 ,,,,,,,,,,,,,,,,,md
20 ,,,,,,,,,,,,,,,,,,md
21 ,,,,,,,,,,,,,,,,,,,md
22 ,,,,,,,,,,,,,,,,,,,,md
23 ,,,,,,,,,,,,,,,,,,,,,md
24 ,,,,,,,,,,,,,,,,,,,,,,md
25 ,,,,,,,,,,,,,,,,,,,,,,,md
26 ,,,,,,,,,,,,,,,,,,,,,,,,md
27 ,,,,,,,,,,,,,,,,,,,,,,,,,md
28 ,,,,,,,,,,,,,,,,,,,,,,,,,,md
29 ,,,,,,,,,,,,,,,,,,,,,,,,,,,md
30 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
31 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
32 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
33 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
34 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
35 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
36 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
37 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
38 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
39 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
40 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
41 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
42 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
43 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
44 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
45 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
46 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
47 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
48 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
49 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
50 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
51 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
52 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
53 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
54 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
55 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
56 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
57 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
58 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
59 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
60 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
61 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
62 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
63 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
64 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
65 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
66 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
67 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
68 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
69 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
70 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
71 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
72 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
73 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
74 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
75 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
76 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
77 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
78 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
79 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
80 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
81 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
82 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
83 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
84 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
85 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
86 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
87 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
88 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
89 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
90 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
91 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
92 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
93 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
94 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
95 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
96 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
97 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
98 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
99 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
100 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
101 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
102 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
103 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
104 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
105 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
106 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
107 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
108 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
109 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
110 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
111 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
112 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
113 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
114 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
115 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
116 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
117 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
118 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
119 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
120 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
121 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
122 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
123 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
124 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
125 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
126 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
127 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
128 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
129 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
130 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
131 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
132 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
133 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
134 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
135 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
136 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
137 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
138 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
139 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
140 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
141 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
142 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
143 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
144 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
145 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
146 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
147 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
148 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
149 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
150 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
151 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
152 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
153 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
154 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
155 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
156 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
157 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
158 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
159 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
160 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
161 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
162 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
163 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
164 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
165 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
166 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
167 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
168 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
169 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
170 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
171 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
172 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
173 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
174 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
175 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
176 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
177 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
178 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
179 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
180 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
181 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
182 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
183 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
184 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
185 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
186 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
187 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
188 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
189 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
190 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
191 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
192 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
193 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
194 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
195 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
196 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
197 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
198 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
199 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
200 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
201 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md

@ -0,0 +1,201 @@
#dig start(1;200) marks a diagonal line up and right starting at the cursor
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,,md
,,,,,,,,,,,,,,md
,,,,,,,,,,,,,md
,,,,,,,,,,,,md
,,,,,,,,,,,md
,,,,,,,,,,md
,,,,,,,,,md
,,,,,,,,md
,,,,,,,md
,,,,,,md
,,,,,md
,,,,md
,,,md
,,md
,md
md
1 #dig start(1;200) marks a diagonal line up and right starting at the cursor
2 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
3 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
4 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
5 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
6 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
7 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
8 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
9 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
10 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
11 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
12 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
13 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
14 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
15 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
16 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
17 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
18 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
19 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
20 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
21 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
22 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
23 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
24 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
25 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
26 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
27 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
28 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
29 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
30 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
31 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
32 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
33 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
34 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
35 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
36 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
37 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
38 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
39 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
40 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
41 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
42 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
43 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
44 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
45 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
46 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
47 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
48 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
49 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
50 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
51 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
52 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
53 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
54 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
55 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
56 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
57 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
58 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
59 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
60 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
61 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
62 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
63 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
64 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
65 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
66 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
67 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
68 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
69 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
70 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
71 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
72 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
73 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
74 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
75 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
76 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
77 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
78 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
79 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
80 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
81 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
82 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
83 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
84 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
85 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
86 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
87 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
88 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
89 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
90 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
91 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
92 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
93 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
94 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
95 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
96 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
97 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
98 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
99 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
100 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
101 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
102 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
103 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
104 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
105 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
106 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
107 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
108 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
109 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
110 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
111 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
112 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
113 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
114 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
115 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
116 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
117 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
118 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
119 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
120 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
121 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
122 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
123 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
124 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
125 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
126 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
127 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
128 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
129 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
130 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
131 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
132 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
133 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
134 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
135 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
136 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
137 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
138 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
139 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
140 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
141 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
142 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
143 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
144 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
145 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
146 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
147 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
148 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
149 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
150 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
151 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
152 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
153 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
154 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
155 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
156 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
157 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
158 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
159 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
160 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
161 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
162 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
163 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
164 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
165 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
166 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
167 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
168 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
169 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
170 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
171 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
172 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
173 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,md
174 ,,,,,,,,,,,,,,,,,,,,,,,,,,,md
175 ,,,,,,,,,,,,,,,,,,,,,,,,,,md
176 ,,,,,,,,,,,,,,,,,,,,,,,,,md
177 ,,,,,,,,,,,,,,,,,,,,,,,,md
178 ,,,,,,,,,,,,,,,,,,,,,,,md
179 ,,,,,,,,,,,,,,,,,,,,,,md
180 ,,,,,,,,,,,,,,,,,,,,,md
181 ,,,,,,,,,,,,,,,,,,,,md
182 ,,,,,,,,,,,,,,,,,,,md
183 ,,,,,,,,,,,,,,,,,,md
184 ,,,,,,,,,,,,,,,,,md
185 ,,,,,,,,,,,,,,,,md
186 ,,,,,,,,,,,,,,,md
187 ,,,,,,,,,,,,,,md
188 ,,,,,,,,,,,,,md
189 ,,,,,,,,,,,,md
190 ,,,,,,,,,,,md
191 ,,,,,,,,,,md
192 ,,,,,,,,,md
193 ,,,,,,,,md
194 ,,,,,,,md
195 ,,,,,,md
196 ,,,,,md
197 ,,,,md
198 ,,,md
199 ,,md
200 ,md
201 md

@ -0,0 +1,768 @@
#notes label(help)
"This is Buketgeshud, or translated from Dwarvish, The Quick Fortress. It is a set of basic blueprints for quickfort, demonstrating its use in assembling an entire basic (if incomplete) fort."
""
Buketgeshud is designed around a 30x20 footprint with a common 2x2 central staircase. Blueprints can be repeated in any direction to connect in a modular fashion with adjacent 30x20 areas. A fortresswide example recirculating waterfall/plumbing system is included as an overlay if you're feeling hardcore.
""
Walkthrough:
1) Embark!
""
2) Clear a 30 wide x 20 high region of trees on the surface. This should be uninterrupted flat ground with soil (so that we can place farms below). Deconstruct your wagon.
""
"3) Run /surface1. You'll want to put the cursor in the middle of the 30x20 cleared area (14 right, 8 down from the top left corner). This digs out stairs on the surface, a farm/depot/workshop level below, as well as the beginnings of an entrance moat. The beginnings of a 3rd z-level are also dug out; don't build anything here if you'd like to put waterfall plumbing in later."
""
"4) After /surface1 is dug out, run /surface2 (beginning from the same starting position as you used for /surface1). This puts down a basic set of workshops commonly needed soon after embark, a couple farm plots, and a depot. It also places and configures starting stockpiles."
""
"5) If your embark site is near any enemies, run /surface3 to build walls and traps on the surface to protect against invaders."
""
"6) Dig out the central shaft and tunnels for several z-levels below our surface/depot level. Place the cursor THREE Z-levels below the surface, where no digging has occurred yet, and run /basic1 for 6 z-levels down starting from that level."
""
"7) Optionally run /basic2 to designate booze-only stockpiles around the central stairs on every z-level below the farming level. The stockpiles are configured to take booze from the level above, so be sure to apply /basic2 on the top level first and work your way down."
""
"8) Run workshops, bedrooms, and storeroom blueprints on any desired Z-level along our central shaft."
""
"9) If desired, add a fortresswide waterfall system, bathing your dwarves in tile after tile of lovely waterfall mist as they go about their day. Run /waterfall1 on the z-level immediately below your farm/depot level (you left that space empty, didn't you?) and run /plumbing1 on z-levels below that, down to the bottom of your fort. Each application of /plumbing1 will dig out two floors. On the bottommost level, the screw pumps that will be placed there require 2 floor tiles to sit on, so remove or refloor the 2 northern channel designations in the lower right corner on that z-level. You'll also need a reservior in the z-level below that (not included)."
""
"10) After all levels are dug out, apply /plumbing2 on the *bottommost* level, just above the reservior. The blueprint will build screw pumps on that level and the level above. Repeat on every alternate level up to the level below where you applied /waterfall1."
""
"11) Finally, apply /waterfall2 on the z-level where you applied /waterfall1. Route flowing water to the 2 tiles in lower right."
"#dig label(surface1) start(15;10; top left corner of central stairs) message(The 3rd z-level just digs stairs; if you want to install the waterfall plumbing system later, leave this 3rd level EMPTY for now and start the base proper below that; use /basic1 to dig out areas for future use below.) Surface and farm/depot levels"
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,,,,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,,h,h,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,,,h,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,h,,h,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,,,h,h,h,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,,h,h,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,,,,h,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,h,h,h,h,,`,#
`,,,,j,,,,,,,,,,j,j,,,,,,,`,h,,,,,,`,#
`,,,,j,,,,,,,,,,j,j,,,,,,,`,h,,h,h,h,h,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,h,h,h,h,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,h,,h,h,h,h,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,h,,,,,,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,`,h,h,h,h,,`,#
`,,,,,,,,,,,,`,,,,,`,,,,,~,~,,,,,,`,#
`,,,,,,,,,,,,`,,,,,`,,,,,`,`,h,h,h,h,h,`,#
`,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`,`,#
#>,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
d,d,d,d,j,d,d,d,d,d,d,d,d,d,j,j,d,d,d,d,d,d,`,`,`,`,`,`,`,`,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,,,,d,d,d,d,d,`,,,,,,,`,#
`,,,,d,,,,,,,,d,,d,d,,d,,,,,`,,,,,,,`,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,`,,,,,,,`,#
`,,,,d,,,,d,d,d,d,,d,d,d,d,,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,,d,d,d,d,,d,d,d,d,,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,,,,d,d,,,d,d,,,,,,,`,,,,,,,`,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,,d,d,d,d,,d,d,d,d,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,,d,d,d,d,,r,r,r,r,d,d,d,d,d,`,,,,,,,`,#
d,d,d,d,d,d,d,d,d,d,d,d,,~,~,~,~,d,d,d,d,d,`,,,,,,,`,#
`,`,`,`,j,`,`,`,`,`,`,`,`,~,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`,`,#
#>,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
d,,,,i,,,,,,,,,,i,i,,,,,,,,,,j,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,d,d,,,,,,,,,,,,,,,#
,,,,i,,,,,,,,,d,i,i,d,,,,,,,,,j,,,,,#
,,,,i,,,,,,,,,d,i,i,d,,,,,,,,,j,,,,,#
,,,,,,,,,,,,,,d,d,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,i,,,,,,,,,,j,j,,,,,,,,,,j,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#meta label(surface2) Build basic workshops and stockpiles
/surface2_build
/surface2_place
/surface2_query
/surface2_doors
"#build label(surface2_build) hidden() start(15;10; top left corner of central stairs) Populates the surface and farm/depot levels with farm plots, workshops and a depot"
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,~,#
`,,,,,,,,wu,,,wr,,,,,,,,,,,`,,,,,,,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,wn,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,,,,,,,`,#
`,,,,,,,,,,,,`,,,,,`,,,,,~,,,,,,,`,#
`,,,,,,,,,,,,`,,,,,`,,,,,`,,,,,,,`,#
`,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`,`,#
#>,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
,,,,`,,,,p(6x7),,,,,,`,`,p(6x7),,,,,,`,`,`,`,`,`,`,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,wl,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,`,`,`,,`,`,`,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,`,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,`,`,`,,,`,`,,,`,`,`,`,`,`,`,,,,,,,`,#
,wc,,,,wm,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,`,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,`,,,,,`,,,,,,,D,,,`,,,,,,,`,#
,wt,,,,wr,,`,,,,,`,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,`,,,,,,,,,,`,,,,,,,`,#
,,,,`,,,`,,,,,`,`,`,`,`,,,,,,`,`,`,`,`,`,`,`,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#place label(surface2_place) hidden() start(15;10; top left corner of central stairs) Lay stockpiles on surface and depot/farm levels
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
`,r(6x6),,,,,~,,,,,,,r(3x6),,,r(5x6),,,,,z(1x6),`,`,,,,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,`,`,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,`,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,`,,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,`,`,`,`,#
`,~,,,,,~,,,,,,,~,,,~,,,,,~,`,`,,`,`,,,`,#
`,,,,,,,,,,,,,,,,,,w(4x8),,,,`,`,,,,`,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,`,`,`,`,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,`,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,`,`,`,`,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,`,`,`,`,`,#
`,u(11x3),,,,,,,,,,,`,~,~,~,~,`,,,,,`,`,,,,,,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,`,`,`,`,`,,`,#
`,,,,,,,,,,,,`,,,,,`,y(4x2),,,,~,~,,,,,,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,`,`,`,`,`,`,`,#
`,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`,`,#
#>,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
f,f,f,f,,f,f,f,,,,,,,`,`,,,,,,,`,`,`,`,`,`,`,`,#
f,f,f,f,f,f,f,f,,,,,,,f(2x6),,,,,,,,`,,,,,,,`,#
f,f,f,f,f,f,f,f,,,,,,,,,,,,,,,`,,,,,,,`,#
f,f,,,,f,f,f,,,,,,,,,,,,,,,`,,,,,,,`,#
f,f,,,,f,f,f,,,,,,,,,,,,,,,`,,,,,,,`,#
f,f,,,,f,f,f,,,,,,,,,,,,,,,`,,,,,,,`,#
f,f,f,f,f,f,f,f,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,`,,,,,,`,`,`,`,,,,,,`,,,,,,,`,#
,,,,`,,,,,,,,`,,f(2x1),,,`,,,,,`,,,,,,,`,#
w(4x2),,,,,f(9x2),,,,,,,,,`,`,f(1x2),,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,`,`,,,,,,,`,,,,,,,`,#
,,,,`,,,,g(4x2),,,,,,f(2x1),,,,,,,,`,,,,,,,`,#
,,,s(1x8),,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,`,`,,,,,,,`,,,,,,,`,#
,,,,,,,,g(4x5),,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,`,,,,,,,,,`,`,`,`,,,,,,`,`,`,`,`,`,`,`,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#query label(surface2_query) hidden() start(15;10; top left corner of central stairs) message(remember to set the farm plots to grow plump helmets) Adjust surface/depot level stockpiles
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
`,bodyparts,,,,,~,,,,,,,rawhides,,,craftrefuse,,,,,,`,`,,,,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,`,`,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,`,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,`,,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,`,`,`,`,#
`,~,,,,,~,,,,,,,~,,,~,,,,,~,`,`,,`,`,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,,`,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,`,`,`,`,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,`,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,`,`,`,`,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,,,,,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,,`,`,`,`,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,`,,,,,,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,`,`,`,`,`,,`,#
`,,,,,,,,,,,,`,,,,,`,,,,,~,~,,,,,,`,#
`,,,,,,,,,,,,`,,,,,`,,,,,`,`,`,`,`,`,`,`,#
`,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`,`,#
#>,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
noseeds,,,,,,,,,,,,,,`,`,,,,,,,`,`,`,`,`,`,`,`,#
,,,,,,,,,,,,,,seeds,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,`,,,,,,`,`,`,`,,,,,,`,,,,,,,`,#
,,,,`,,,,,,,,`,,booze,t{Down}{Left 2}&,,`,,,,,`,,,,,,,`,#
,,,,,booze,,,,,,,,,`,`,booze,,,,,,`,,,,,,,`,#
,,,,,t{Up 5}&,,,,,,,,,`,`,t{Left 3}&,,,,,,`,,,,,,,`,#
,,,,`,,,,,,,,,,booze,t{Up}{Left 2}&,,,,,,,`,,,,,,,`,#
,,,otherstone,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,`,`,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,~,~,~,~,,,,,,`,,,,,,,`,#
,,,,`,,,,,,,,,`,`,`,`,,,,,,`,`,`,`,`,`,`,`,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#build label(surface2_doors) hidden() start(15;10; top left corner of central stairs) Just builds doors on the depot level (just below the surface)
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#>,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
,,,,,,,,,,,,,,,,,,,,,,`,`,`,`,`,`,`,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
`,,,,d,,,,,,,,d,,,,,d,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,`,`,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,`,`,,,,,,,`,,,,,,,`,#
`,,,,d,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,d,d,,,d,d,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,d,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,d,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,,,,,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,`,`,`,`,,,,,,`,,,,,,,`,#
,,,,,,,,,,,,,~,~,~,~,,,,,,`,,,,,,,`,#
`,`,`,`,~,`,`,`,`,`,`,`,`,~,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`,`,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#meta label(surface3) Build walls and traps to protect against invaders
/surface3_walls
/surface3_traps
#build label(surface3_walls) hidden() start(15;10; top left corner of central stairs) Builds walls and bridges on the surface level. Note that the entrance on the southern wall juts out from the 30x20 footprint by 3 tiles; the southern bridge extends beyond the edge of the blueprint itself.\n\nYou'll need to add and connect levers yourself.
Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,gd(2x3),,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,Cw,Cw,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,,,,,,,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,Cw,gw(4x2),,,,Cw,,,,,Cw,,,,,,,Cw,#
Cw,,,,,,,,,,,,Cw,,,,,Cw,,,,,Cw,Cw,,,,,,Cw,#
Cw,,,,,,,,,,,,Cw,,,,,Cw,,,,,ga(2x1),,,,,,,Cw,#
Cw,,,,,,,,,,,,Cw,,,,,Cw,,,,,Cw,Cw,,,,,,Cw,#
Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,,,,,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,Cw,#
,,,,,,,,,,,,Cw,,,,,Cw,,,,,,,,,,,,,#
,,,,,,,,,,,,Cw,gw(4x2),,,,Cw,,,,,,,,,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#build label(surface3_traps) hidden() start(15;10; top left corner of central stairs) Put some stone-fall traps down.
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,Ts,Ts,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,`,`,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,Ts,`,,~,~,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,`,Ts,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,Ts,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,`,`,Ts,Ts,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,Ts,Ts,`,Ts,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,`,`,`,`,Ts,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,Ts,Ts,Ts,Ts,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,`,`,`,`,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,Ts,Ts,Ts,Ts,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,`,`,`,`,Ts,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,Ts,Ts,Ts,Ts,`,#
`,,,,,,,,,,,,,,,,,,,,,,`,`,Ts,`,`,`,`,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,`,Ts,Ts,Ts,Ts,Ts,`,#
`,,,,,,,,,,,,`,~,~,~,~,`,,,,,`,`,`,`,`,`,Ts,`,#
`,,,,,,,,,,,,`,,,,,`,,,,,~,~,Ts,Ts,Ts,Ts,Ts,`,#
`,,,,,,,,,,,,`,,,,,`,,,,,`,`,`,`,`,`,`,`,#
`,`,`,`,`,`,`,`,`,`,`,`,`,~,~,~,~,`,`,`,`,`,`,`,`,`,`,`,`,`,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#dig label(basic1) start(15;10; top left corner of central stairs) Common stair/shaft digging for all floors below surface/depot levels
,,,,i,,,,,,,,,,i,i,,,,,,,,,,i,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,i,d,d,d,d,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,i,d,d,d,d,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
,,,,i,,,,,,,,,,i,i,,,,,,,,,,i,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#meta label(basic2) Place and configure food/booze stockpiles around the central staircase
/basic2_place
/basic2_query
#place label(basic2_place) hidden() start(15;10; top left corner of central stairs) Places food stockpiles around the central staircase
,,,,`,,,,,,,,,,`,`,,,,,,,,,,`,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,f(2x1),,,,,,,,,,,,,,,,#
,,,,`,,,,,,,,,f(1x2),`,`,f(1x2),,,,,,,,,`,,,,,#
,,,,`,,,,,,,,,,`,`,,,,,,,,,,`,,,,,#
,,,,,,,,,,,,,,f(2x1),,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,`,,,,,,,,,,`,`,,,,,,,,,,`,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
"#query label(basic2_query) hidden() start(15;10; top left corner of central stairs) configures booze stockpiles around stairway, taking from the stockpile on the level above"
,,,,`,,,,,,,,,,`,`,,,,,,,,,,`,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,booze,t<&,,,,,,,,,,,,,,,#
,,,,`,,,,,,,,,booze,`,`,booze,,,,,,,,,`,,,,,#
,,,,`,,,,,,,,,t<&,`,`,t<&,,,,,,,,,`,,,,,#
,,,,,,,,,,,,,,booze,t<&,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,`,,,,,,,,,,`,`,,,,,,,,,,`,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
"#dig label(workshops1) start(15;10; top left corner of central stairs) Just four big rooms, suitable for workshops"
d,d,d,d,i,d,d,d,d,d,d,d,d,,i,i,,d,d,d,d,d,d,d,d,i,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,,#
,d,,,d,,,,,,,,d,,d,d,,d,,,,,,,,d,,,,,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,i,d,d,d,d,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,i,d,d,d,d,#
,d,,,d,,,,,,,,d,,d,d,,d,,,,,,,,d,,,,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,`,`,`,`,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,`,,,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,`,,,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,`,,,,#
,,,,i,,,,,,,,,,i,i,,,,,,,,,,i,`,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#meta label(workshops2) Build commonly needed workshops and associated stockpiles
/workshops2_build
/workshops2_place
/workshops2_doors
#build label(workshops2_build) hidden() start(15;10; top left corner of central stairs) Sufficient workshops for basic non-food needs
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,wj,,,,we,,,,we,,,`,`,,,es,,,,ew,,,,ek,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,wj,,,,we,,,,we,,,`,`,,,es,,,,eg,,,,wf,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
`,`,`,`,~,`,`,`,`,`,`,`,`,`,~,~,`,`,`,`,`,`,`,`,`,~,`,`,`,`,#
`,`,`,`,~,`,`,`,`,`,`,`,`,`,~,~,`,`,`,`,`,`,`,`,`,~,`,`,`,`,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,wr,,,,wr,,,,wm,,,`,`,,,wc,,,,wc,,,,wb,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
`,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
`,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
`,,,wt,,,,wt,,,,wm,,,`,`,,,wc,,,,wc,,,,,,,,#
`,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
`,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#place label(workshops2_place) hidden() start(15;10; top left corner of central stairs) Workshop source material piles placed around the workshops.
e,e,e,e,,l,l,l,l,l,l,l,l,,`,`,,b,b,b,b,b,b,b,b,,b,b,b,,#
e,e,e,e,e,l,l,l,l,l,l,l,l,,`,`,,b,b,b,b,b,b,b,b,b,b,b,b,,#
e,e,,,,l,,,,l,,,,,`,`,,,,,b,,,,b,,,,b,,#
e,e,,,,l,,,,l,,,,,`,`,,,,,b,,,,b,,,,b,,#
e,e,,,,l,,,,l,,,,,`,`,,,,,b,,,,b,,,,b,,#
,,,,,l,,,,l,,,,,`,`,,,,,b,,,,b,,,,b,,#
,,,,,l,,,,l,,,,,`,`,,,,,b,,,,b,,,,b,,#
,,,,,l,,,,l,,,,,`,`,,,,,b,,,,b,,,,b,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
`,`,`,`,~,`,`,`,`,`,`,`,`,`,~,~,`,`,`,`,`,`,`,`,`,~,`,`,`,`,#
`,`,`,`,~,`,`,`,`,`,`,`,`,`,~,~,`,`,`,`,`,`,`,`,`,~,`,`,`,`,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,w,,,,w,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,w,,,,w,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,w,,,,w,,,,,,#
,,,s(10x1),,,,,,,,,,,`,`,,w,w,w,w,w,w,w,w,w,,,,,#
,,,,,,,,,,,,,,`,`,,,,,w,,,,w,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,w,,,,w,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,w,,,,w,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#build label(workshops2_doors) hidden() start(15;10; top left corner of central stairs) Fill in doors to the workrooms.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,d,,,d,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,d,,,d,,,,,,,,,,,,,,#
,d,,,d,,,,,,,,d,,,,,d,,,,,,,,d,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,d,,,d,,,,,,,,d,,,,,d,,,,,,,,d,,,,,#
,,,,,,,,,,,,,d,,,d,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,d,,,d,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
"#dig label(storeroom1) start(15;10; Top left corner of central stairs) Just four big rooms, suitable for storerooms"
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,i,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
,,,,d,,,,,,,,d,,d,d,,d,,,,,,,,d,,,,,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,i,d,d,d,d,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,i,d,d,d,d,#
,,,,d,,,,,,,,d,,d,d,,d,,,,,,,,d,,,,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,,,,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,,,,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,,,,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,,d,d,,d,d,d,d,d,d,d,d,d,,,,,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,d,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#meta label(storeroom2a) General stockpiles
/storeroom2a_place
/storeroom2_doors
"#meta label(storeroom2b) Extra storage for wood, food and furniture"
/storeroom2b_place
/storeroom2_doors
#place label(storeroom2a_place) hidden() start(15;10; top left corner of central stairs) General stockpiles
g(6x8),,,,x(1x1),,l(7x8),,,,,,,,,,,d(7x5),,,,,,,p(6x5),x(1x1),,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,b(7x3),,,,,,,z(6x3),,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
`,`,`,`,,`,`,`,`,`,`,`,,`,,,`,,`,`,`,`,`,`,`,,`,`,`,`,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
`,`,`,`,,`,`,`,`,`,`,`,,`,,,`,,`,`,`,`,`,`,`,,`,`,`,`,#
u(13x8),,,,,,,,,,,,,,,,,u(7x8),,,,,,,w(6x8),,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,x(4x5),,,`,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,`,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,`,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,`,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,`,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
"#place label(storeroom2b_place) hidden() start(15;10; top left corner of central stairs) Extra storage for wood, food and furniture"
w(13x8),,,,x(1x1),,,,,,,,,,,,,f(13x8),,,,,,,,x(1x1),,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
`,`,`,`,,`,`,`,`,`,`,`,,`,,,`,,`,`,`,`,`,`,`,,`,`,`,`,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
`,`,`,`,,`,`,`,`,`,`,`,,`,,,`,,`,`,`,`,`,`,`,,`,`,`,`,#
u(13x8),,,,,,,,,,,,,,,,,u(13x8),,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,x(4x5),,,`,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,`,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,`,,,,#
,,,,,,,,,,,,,`,,,`,,,,,,,,,,`,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,`,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#build label(storeroom2_doors) hidden() start(15;10; top left corner of central stairs) Build storeroom doors
,,,,,,,,,,,,,d,,,d,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,d,,,d,,,,,,,,,,,,,,#
,,,,d,,,,,,,,d,,,,,d,,,,,,,,d,,,,d,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,d,,,,,,,,d,,,,,d,,,,,,,,d,,,,d,#
,,,,,,,,,,,,,d,,,d,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,d,,,d,,,,,,,,,,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#dig label(bedrooms1) start(15;10; top left corner of central stairs) Bedroom complex
d,d,d,,i,,d,d,d,,d,d,d,,i,i,,d,d,d,,d,d,d,,i,,,,,#
d,d,d,d,d,d,d,d,d,,d,d,d,d,d,d,d,d,d,d,,d,d,d,d,d,,d,d,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,d,d,,#
d,d,d,d,d,d,d,d,d,,d,d,d,d,d,d,d,d,d,d,,d,d,d,d,d,d,d,d,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
d,,d,,d,,d,,d,,d,d,d,d,d,d,d,d,d,d,,d,,d,,d,,d,d,,#
d,,d,,d,,d,,d,,,,,,d,d,,,,,,d,,d,,d,,d,d,,#
d,,d,,d,,d,,d,,,d,d,d,d,d,d,d,d,,,d,,d,,d,d,d,d,,#
d,,d,,d,,d,,d,,d,d,d,d,d,d,d,d,d,d,,d,,d,,d,,,,,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,i,d,d,d,d,#
d,d,d,d,i,d,d,d,d,d,d,d,d,d,i,i,d,d,d,d,d,d,d,d,d,i,d,d,d,d,#
d,,d,,d,,d,,d,,d,d,d,d,d,d,d,d,d,d,,d,,d,,d,,,,,#
d,,d,,d,,d,,d,,,d,d,d,d,d,d,d,d,,,d,,d,,d,d,d,d,,#
d,,d,,d,,d,,d,,,,,,d,d,,,,,,d,,d,,d,,d,d,,#
d,,d,,d,,d,,d,,d,d,d,d,d,d,d,d,d,d,,d,,d,,d,,d,d,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
d,d,d,d,d,d,d,d,d,,d,d,d,d,d,d,d,d,d,d,,d,d,d,d,d,,,,,#
,,,,d,,,,,,,,,,d,d,,,,,,,,,,d,,,,,#
d,d,d,d,d,d,d,d,d,,d,d,d,d,d,d,d,d,d,d,,d,d,d,d,d,,,,,#
,,,,i,,,,,,,,,,i,i,,,,,,,,,,i,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#build label(bedrooms2) start(15;10; top left corner of central stairs) Bedroom furniture
f,h,h,,,,h,h,f,,f,h,h,,,,,h,h,f,,f,h,h,,,,,,,#
b,,,d,,d,,,b,,b,,,d,,,d,,,b,,b,,,d,,,f,h,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,h,,#
b,f,h,d,,d,h,f,b,,b,f,h,d,,,d,h,f,b,,b,f,h,d,,d,,b,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
b,,b,,,,b,,b,,b,f,h,d,,,d,h,f,b,,b,,b,,,,f,h,,#
f,,f,,,,f,,f,,,,,,,,,,,,,f,,f,,,,,h,,#
h,,h,,,,h,,h,,,t,t,,,,,,,,,h,,h,,,d,,b,,#
d,,d,,,,d,,d,,,c,c,,,,,,,,,d,,d,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
d,,d,,,,d,,d,,,,,,,,,c,c,,,d,,d,,,,,,,#
h,,h,,,,h,,h,,,,,,,,,t,t,,,h,,h,,,d,,h,,#
f,,f,,,,f,,f,,,,,,,,,,,,,f,,f,,,,,h,,#
b,,b,,,,b,,b,,b,f,h,d,,,d,h,f,b,,b,,b,,,,f,b,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
b,f,h,d,,d,h,f,b,,b,f,h,d,,,d,h,f,b,,b,f,h,d,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
b,f,h,d,,d,h,f,b,,b,f,h,d,,,d,h,f,b,,b,f,h,d,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#query label(bedrooms3) start(15;10; top left corner of central stairs) Makes bedrooms and small dining rooms from beds and tables
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
r+,,,,,,,,r+,,r+,,,,,,,,,r+,,r+,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
r+,,,,,,,,r+,,r+,,,,,,,,,r+,,r+,,,,,,,r+,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
r+,,r+,,,,r+,,r+,,r+,,,,,,,,,r+,,r+,,r+,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,r++&,,,,,,,,,,,,,,,,,r+,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,r++&,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
r+,,r+,,,,r+,,r+,,r+,,,,,,,,,r+,,r+,,r+,,,,,r+,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
r+,,,,,,,,r+,,r+,,,,,,,,,r+,,r+,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
r+,,,,,,,,r+,,r+,,,,,,,,,r+,,r+,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#dig label(plumbing1) start(15;10; top left corner of central stairs) Plumbing for the waterfall system
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,h,h,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,h,,,,,,,,,h,,,,,,,,,,,#
,,,,,,,,,,h,,,,,,,,,h,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,h,h,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,h,h,#
,,,,,,,,,,,,,,,,,,,,,,,,,,d,d,d,d,#
,,,,,,,,,,,,,,,,,,,,,,,,,,d,,h,h,#
,,,,,,,,,,,,,,,,,,,,,,,,,i,d,,d,d,#
#>,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,h,h,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,h,,,,,,,,,h,,,,,,,,,,,#
,,,,,,,,,,h,,,,,,,,,h,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,h,h,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,d,d,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,h,h,#
,,,,,,,,,,,,,,,,,,,,,,,,,,d,d,d,d,#
,,,,,,,,,,,,,,,,,,,,,,,,,i,d,,h,h,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
"#build label(plumbing2) start(15;10; top left corner of central stairs) Grates, doors, and screw pumps for the waterfall plumbing"
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,G,G,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,G,,,,,,,,,G,,,,,,,,,,,#
,,,,,,,,,,G,,,,,,,,,G,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,G,G,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,`,`,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,d,Msm,Msm,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,~,~,#
#<,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,G,G,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,G,,,,,,,,,G,,,,,,,,,,,#
,,,,,,,,,,G,,,,,,,,,G,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,G,G,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,~,~,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,d,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,Msu,Msu,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,`,`,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#dig label(waterfall1) start(15;10; top left corner of central stairs) Top-level plumbing for the waterfall system
,,,,i,,,,,,,,,,i,i,,,,,,,,,,i,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
,,,,,,d,,,,,,,,,,,,,,,,,,,,,,,d,#
,,,,,,d,,,,,,,,d,d,d,d,d,d,d,d,d,d,d,d,d,d,,d,#
,,,,,,d,,,,,,,,h,h,,,,,,,,,,,,d,,d,#
,,,,,,d,,,,,,,,,,,,,,,,,,,,,d,,d,#
,,,,,,d,,,,,,,,,,,,,,,,,,,,,d,,d,#
,,,,,,d,,,,,,,,,,,,,,,,,,,,,d,,d,#
,,,,i,,d,d,d,d,h,,,,i,i,,,,h,d,d,d,d,,i,,d,,d,#
,,,,i,,d,d,d,d,h,,,,i,i,,,,h,d,d,d,d,,i,,d,d,d,#
,,,,,,,,,,,,,,,,,,,,,,,d,,,,,d,d,#
,,,,,,,,,,,,,,,,,,,,,,,d,d,d,d,d,d,d,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,d,d,d,#
,,,,,,,,,,,,,,h,h,,,,d,d,d,d,d,d,d,d,d,d,d,#
,,,,,,,,,,,,,,d,d,,,,d,,,,,,,,,d,d,#
,,,,,,,,,,,,,,d,d,d,d,d,d,,d,d,d,,d,d,d,d,d,#
,,,,,,,,,,,,,,,,,,,,,d,d,d,d,d,,,d,d,#
,,,,,,,,,,,,,,d,d,d,d,d,d,d,d,d,d,,d,d,d,d,d,#
,,,,i,,,,,,,,,,i,i,,,,,,,,,,i,,,d,d,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
"#build label(waterfall2) start(15;10; top left corner of central stairs) message(Remember to link the levers and lock the doors manually) Floodgates, screw pumps, bridges and levers to control flow"
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,x,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,x,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,`,`,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,x,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,gw(2x1),,#
,,,,,,,,,,,,,,,,x,,,,,,Tl,,,,,d,,,#
,,,,,,,,,,,,,,,,,,,,,Tl,Tl,Tl,d,,,,,,#
,,,,,,,,,,,,,,,,,,,,,,Tl,,,,,d,Msm,Msm,#
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
Can't render this file because it has a wrong number of fields in line 29.

@ -0,0 +1,26 @@
#dig start(6;6) room for 24 corpses
d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d,d,d, ,d, ,d,#
, , , ,d,d,d, , , , ,#
d, ,d,d,i,i,i,d,d, ,d,#
d,d,d,d,i,i,i,d,d,d,d,#
d, ,d,d,i,i,i,d,d, ,d,#
, , , ,d,d,d, , , , ,#
d, ,d, ,d,d,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d,#
#,#,#,#,#,#,#,#,#,#,#,#
#build label(urns) start(6;6) message(use burial script to mark urns as usable) 24 urns
n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,`,`,`, ,n, ,n,#
, , , ,`,`,`, , , , ,#
n, ,`,`,~,~,~,`,`, ,n,#
`,`,`,`,~,~,~,`,`,`,`,#
n, ,`,`,~,~,~,`,`, ,n,#
, , , ,`,`,`, , , , ,#
n, ,n, ,`,`,`, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n,#
#,#,#,#,#,#,#,#,#,#,#,#
1 #dig start(6;6) room for 24 corpses
2 d, ,d, ,d, ,d, ,d, ,d,#
3 d,d,d,d,d,d,d,d,d,d,d,#
4 d, ,d, ,d,d,d, ,d, ,d,#
5 , , , ,d,d,d, , , , ,#
6 d, ,d,d,i,i,i,d,d, ,d,#
7 d,d,d,d,i,i,i,d,d,d,d,#
8 d, ,d,d,i,i,i,d,d, ,d,#
9 , , , ,d,d,d, , , , ,#
10 d, ,d, ,d,d,d, ,d, ,d,#
11 d,d,d,d,d,d,d,d,d,d,d,#
12 d, ,d, ,d, ,d, ,d, ,d,#
13 #,#,#,#,#,#,#,#,#,#,#,#
14 #build label(urns) start(6;6) message(use burial script to mark urns as usable) 24 urns
15 n, ,n, ,n, ,n, ,n, ,n,#
16 `,`,`,`,`,`,`,`,`,`,`,#
17 n, ,n, ,`,`,`, ,n, ,n,#
18 , , , ,`,`,`, , , , ,#
19 n, ,`,`,~,~,~,`,`, ,n,#
20 `,`,`,`,~,~,~,`,`,`,`,#
21 n, ,`,`,~,~,~,`,`, ,n,#
22 , , , ,`,`,`, , , , ,#
23 n, ,n, ,`,`,`, ,n, ,n,#
24 `,`,`,`,`,`,`,`,`,`,`,#
25 n, ,n, ,n, ,n, ,n, ,n,#
26 #,#,#,#,#,#,#,#,#,#,#,#

@ -0,0 +1,99 @@
#dig start(24;25) room for 513 corpses
# see an image of this blueprint at https://i.imgur.com/Kcjvx6R.png
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d,d,d,d,d,d,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , ,d,d,d, , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d,d,i,i,i,d,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,i,i,i,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d,d,i,i,i,d,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , ,d,d,d, , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
, , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d,d,d,d,d,d,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#build label(urns) start(24;24) message(use burial script to mark urns as usable) 513 urns
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`,`,`,`,`,`,`,`,`,`,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n,`,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , ,`,`,`, , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`,`,`,`,~,~,~,`,`,`,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,~,~,~,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`,`,`,`,~,~,~,`,`,`,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , ,`,`,`, , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n,`,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
, , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,`,`,`,`,`,`,`,`,`,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
1 #dig start(24;25) room for 513 corpses
2 # see an image of this blueprint at https://i.imgur.com/Kcjvx6R.png
3 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d,d,d,d,d,d,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
4 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
5 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
6 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
7 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
8 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
9 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
10 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
11 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
12 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
13 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
14 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
15 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
16 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
17 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
18 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
19 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
20 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
21 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
22 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
23 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
24 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , ,d,d,d, , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
25 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d,d,i,i,i,d,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
26 , , , , , , , , , , , , , , , , , ,d,d,d,d,i,i,i,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
27 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d,d,i,i,i,d,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
28 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , ,d,d,d, , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
29 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
30 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
31 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
32 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
33 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
34 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
35 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
36 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
37 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
38 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
39 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
40 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
41 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
42 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
43 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
44 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
45 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
46 , , , , , , , , , , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , , , , , , , , , , ,#
47 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
48 d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d, , , , , , , , , ,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,#
49 d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,d,d,d,d,d,d,d,d,d,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d, ,d,#
50 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
51 #build label(urns) start(24;24) message(use burial script to mark urns as usable) 513 urns
52 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`,`,`,`,`,`,`,`,`,`,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
53 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
54 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
55 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
56 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
57 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
58 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
59 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
60 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
61 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
62 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
63 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
64 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
65 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
66 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
67 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
68 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
69 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
70 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
71 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
72 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n,`,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
73 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , ,`,`,`, , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
74 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`,`,`,`,~,~,~,`,`,`,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
75 , , , , , , , , , , , , , , , , , ,`,`,`,`,~,~,~,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
76 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`,`,`,`,~,~,~,`,`,`,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
77 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , ,`,`,`, , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
78 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n,`,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
79 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
80 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
81 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
82 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
83 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
84 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
85 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
86 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
87 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
88 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
89 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
90 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
91 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
92 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
93 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
94 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
95 , , , , , , , , , , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , , , , , , , , , , ,#
96 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
97 `,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`, , , , , , , , , ,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,#
98 n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,`,`,`,`,`,`,`,`,`,`, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n, ,n,#
99 #,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#

@ -0,0 +1,463 @@
# Common baseline for aliases for quickfort query mode blueprints.
#
# Please DO NOT EDIT this file directly. It will get overwritten when DFHack
# is updated. Instead, custom aliases should be added to
# dfhack-config/quickfort/aliases.txt. See that file for syntax documentation.
#
# The aliases in this file were tested in DF 0.47.04 on 2020 Jul 18.
#
# The aliases are generally split into three categories:
# 1) The aliases that name a type disable everything else for that stockpile
# category and enable only that type. For example, "preparedfood" enables
# prepared food and disables all other types of food.
# 2) The aliases that start with "forbid" only forbid (or toggle) the named type
# and leave the rest of the stockpile untouched.
# 3) The aliases that start with "permit" only permit (or toggle) the named type
# and leave the rest of the stockpile untouched.
#
# Aliases that don't fit into those two categories have comments explaining
# their usage.
########################################
# general purpose stockpile adjustments
########################################
linksonly: a
nocontainers: CE
# for configuring stockpiles to give to other nearby stockpiles/workshops
give: g{move}&
give2up: {give move={Up 2}}
give2down: {give move={Down 2}}
give2left: {give move={Left 2}}
give2right: {give move={Right 2}}
give10up: {give move={Up 10}}
give10down: {give move={Down 10}}
give10left: {give move={Left 10}}
give10right: {give move={Right 10}}
# Keep in mind that building, stockpile, and zone names have a maximum length
# of 20 characters. usage example: {givename name="myname"}
givename: {Ctrl}n{name}&
# use to toggle a sequence of stockpile options. for example: {togglesequence 5}
togglesequence: &{Down}
togglesequence2: &{Down 2}
enablesequence: e{Down}
# Enables everything but corpses and refuse. Refuse is excluded since otherwise
# clothes and armor in this quantum stockpile will rot away. If you want bones
# in your quantum stockpile, apply this alias to a refuse stockpile (but don't
# put useful clothes or armor in there!)
# Optionally set a name for the stockpile by specifying the 'name' parameter,
# for example: {quantum name="my name"}
quantum: {linksonly}{nocontainers}{enableanimals}{enablefood}{enablefurniture}{enablestone}{enableammo}{enablecoins}{enablebars}{enablegems}{enablefinishedgoods}{enableleather}{enablecloth}{enablewood}{enableweapons}{enablearmor}{enablesheet}{givename}
##################################
# hauling aliases
##################################
# Run one of the quantumstopfrom* aliases over a track stop that is set to dump
# into a quantum stockpile. The alias will set up the stop to accept all types
# (the actual types stored in the quantum stockpile should be controlled by the
# feeder stockpile) and link the indicated adjacent feeder stockpile. For
# example, the quantumstopfromsouth alias should be used over a track stop set
# to dump to the North and take items from a feeder stockpile one tile to the
# South. All you need to do afterwards is assign a vehicle to the stop. The
# track stop does not need to be constructed yet, but the feeder stockpile needs
# to exist so we can link to it.
#
# Be sure to define the optional 'name' parameter if you want to give your
# quantum hauling routes custom names. Keep in mind that names have a maximum
# length of 22 characters. For example:
# {quantumstopfromsouth name="Trash Dump"}
#
# For several examples of these aliases, see
# https://docs.google.com/spreadsheets/d/1gvTJxxRxZ5V4vXkqwhL-qlr_lXCNt8176TK14m4kSOU
namelastrouteprefix: ^h--n
namelastroutesuffix: &^q
namelastroute: {namelastrouteprefix}{name}{namelastroutesuffix}
quantumstopprefix: ^hrs&xxx&{enablesequence 17}^
quantumstopsuffix: ^q{namelastroute}
quantumstopfromeast: {quantumstopprefix}s{Right}p^{Left}{quantumstopsuffix}
quantumstopfromsouth: {quantumstopprefix}s{Down}p^{Up}{quantumstopsuffix}
quantumstopfromwest: {quantumstopprefix}s{Left}p^{Right}{quantumstopsuffix}
quantumstopfromnorth: {quantumstopprefix}s{Up}p^{Down}{quantumstopsuffix}
##################################
# zone aliases
##################################
# usage example: {namezone name="my zone name"}
namezone: ^i{givename}^q
##################################
# animal stockpile adjustments
##################################
animalsprefix: s
enableanimals: {animalsprefix}e^
disableanimals: {animalsprefix}d^
cages: {animalsprefix}bu^
traps: {animalsprefix}bj^
forbidcages: {animalsprefix}u^
forbidtraps: {animalsprefix}j^
permitcages: {forbidcages}
permittraps: {forbidtraps}
##################################
# food stockpile adjustments
##################################
foodprefix: s{Down}
enablefood: {foodprefix}e^
disablefood: {foodprefix}d^
preparedfood: {foodprefix}bu^
unpreparedfish: {foodprefix}b{Right}{Down 2}p^
plants: {foodprefix}b{Right}{Down 4}p^
booze: {foodprefix}b{Right}{Down 5}p{Down}p^
seeds: {foodprefix}b{Right}{Down 9}p^
dye: {foodprefix}b{Right}{Down 11}{Right}{Down 28}{togglesequence 4}^
tallow: {foodprefix}b{Right}{Down 13}{Right}{Down}{togglesequence2 811}^
miscliquid: {foodprefix}b{Right}{Down 18}p^
forbidpreparedfood: {foodprefix}u^
forbidunpreparedfish: {foodprefix}{Right}{Down 2}f^
forbidplants: {foodprefix}{Right}{Down 4}f^
forbidbooze: {foodprefix}{Right}{Down 5}f{Down}f^
forbidseeds: {foodprefix}{Right}{Down 9}f^
forbiddye: {foodprefix}{Right}{Down 11}{Right}{Down 28}{togglesequence 4}^
forbidtallow: {foodprefix}{Right}{Down 13}{Right}{Down}{togglesequence2 811}^
forbidmiscliquid: {foodprefix}{Right}{Down 18}f^
permitpreparedfood: {forbidpreparedfood}
permitunpreparedfish: {foodprefix}{Right}{Down 2}p^
permitplants: {foodprefix}{Right}{Down 4}p^
permitbooze: {foodprefix}{Right}{Down 5}p{Down}p^
permitseeds: {foodprefix}{Right}{Down 9}p^
permitdye: {forbiddye}
permittallow: {forbidtallow}
permitmiscliquid: {foodprefix}{Right}{Down 18}p^
# enables everything but seeds
noseeds: {disablefood}{enablefood}{forbidseeds}
# enables all food except for the types listed above
food: {noseeds}{forbidpreparedfood}{forbidunpreparedfish}{forbidplants}{forbidbooze}{forbiddye}{forbidtallow}{forbidmiscliquid}
##################################
# furniture stockpile adjustments
##################################
furnitureprefix: s{Down 2}
enablefurniture: {furnitureprefix}e^
disablefurniture: {furnitureprefix}d^
pots: {furnitureprefix}de{Right}f{Right}{Up 5}&^
bags: {furnitureprefix}de{Right}f{Right}{Up 10}&{Left}{Down}f{Down}f{Down}f{Right}{Down}&{Down 6}&{Down}&{Down 6}&^
buckets: {furnitureprefix}de{Right}f{Right}{Up 12}&^
sand: {furnitureprefix}de{Right}f{Right}{Up}&^
###########################################
# corpses and refuse stockpile adjustments
###########################################
corpsesprefix: s{Down 3}
enablecorpses: {corpsesprefix}e^
disablecorpses: {corpsesprefix}d{Up}d^
refuseprefix: s{Down 4}
enablerefuse: {refuseprefix}e^
disablerefuse: {refuseprefix}d^
# bodyparts include remains/corpses and rotten rawhdes
bodyparts: {refuseprefix}b{Right 2}&{Down 2}&{Left}{Down}p{Down}p^
rawhides: {refuseprefix}b{Right 2}{Down}&^
tannedhides: {refuseprefix}b{Right 2}{Down 53}&^
skulls: {refuseprefix}b{Right}{Down 3}p^
bones: {refuseprefix}b{Right}{Down 4}p^
shells: {refuseprefix}b{Right}{Down 5}p^
teeth: {refuseprefix}b{Right}{Down 6}p^
horns: {refuseprefix}b{Right}{Down 7}p^
hair: {refuseprefix}b{Right}{Down 8}p^
craftrefuse: {skulls}{permitbones}{permitshells}{permitteeth}{permithorns}{permithair}
forbidbodyparts: {refuseprefix}{Right 2}&{Down 2}&{Left}{Down}f{Down}f^
forbidrawhides: {refuseprefix}{Right 2}{Down}&^
forbidtannedhides: {refuseprefix}{Right 2}{Down 53}&^
forbidskulls: {refuseprefix}{Right}{Down 3}f^
forbidbones: {refuseprefix}{Right}{Down 4}f^
forbidshells: {refuseprefix}{Right}{Down 5}f^
forbidteeth: {refuseprefix}{Right}{Down 6}f^
forbidhorns: {refuseprefix}{Right}{Down 7}f^
forbidhair: {refuseprefix}{Right}{Down 8}f^
forbidcraftrefuse: {forbidskulls}{forbidbones}{forbidshells}{forbidteeth}{forbidhorns}{forbidhair}
permitbodyparts: {refuseprefix}{Right 2}&{Down 2}&{Left}{Down}p{Down}p^
permitrawhides: {forbidrawhides}
permittannedhides: {forbidtannedhides}
permitskulls: {refuseprefix}{Right}{Down 3}p^
permitbones: {refuseprefix}{Right}{Down 4}p^
permitshells: {refuseprefix}{Right}{Down 5}p^
permitteeth: {refuseprefix}{Right}{Down 6}p^
permithorns: {refuseprefix}{Right}{Down 7}p^
permithair: {refuseprefix}{Right}{Down 8}p^
permitcraftrefuse: {permitskulls}{permitbones}{permitshells}{permitteeth}{permithorns}{permithair}
##################################
# stone stockpile adjustments
##################################
stoneprefix: s{Down 5}
enablestone: {stoneprefix}e^
disablestone: {stoneprefix}d^
metal: {stoneprefix}b{Right}p^
iron: {stoneprefix}b{Right}{Right}&{Down}&{Down 13}&^
economic: {stoneprefix}b{Right}{Down}p^
flux: {stoneprefix}b{Right}{Down}{Right}{togglesequence 4}{Down 4}&^
plaster: {stoneprefix}b{Right}{Down}{Right}{Down 6}&{Down 3}{togglesequence 3}^
coalproducing: {stoneprefix}b{Right}{Down}{Right}{Down 4}{togglesequence 2}^
otherstone: {stoneprefix}b{Right}{Down 2}p^
bauxite: {stoneprefix}b{Right}{Down 2}{Right}{Down 42}&^
clay: {stoneprefix}b{Right}{Down 3}p^
forbidmetal: {stoneprefix}{Right}f^
forbidiron: {stoneprefix}{Right}{Right}&{Down}&{Down 13}&^
forbideconomic: {stoneprefix}{Right}{Down}f^
forbidflux: {stoneprefix}{Right}{Down}{Right}{togglesequence 4}{Down 4}&^
forbidplaster: {stoneprefix}{Right}{Down}{Right}{Down 6}&{Down 3}{togglesequence 3}^
forbidcoalproducing: {stoneprefix}{Right}{Down}{Right}{Down 4}{togglesequence 2}^
forbidotherstone: {stoneprefix}{Right}{Down 2}f^
forbidbauxite: {stoneprefix}{Right}{Down 2}{Right}{Down 42}&^
forbidclay: {stoneprefix}{Right}{Down 3}f^
permitmetal: {stoneprefix}{Right}p^
permitiron: {forbidiron}
permiteconomic: {stoneprefix}{Right}{Down}p^
permitflux: {forbidflux}
permitplaster: {forbidplaster}
permitcoalproducing: {forbidcoalproducing}
permitotherstone: {stoneprefix}{Right}{Down 2}p^
permitbauxite: {forbidbauxite}
permitclay: {stoneprefix}{Right}{Down 3}p^
##################################
# ammo stockpile adjustments
##################################
ammoprefix: s{Down 6}
enableammo: {ammoprefix}e^
disableammo: {ammoprefix}d^
bolts: {ammoprefix}a{Right 2}{Down}{togglesequence 2}^
forbidmetalbolts: {ammoprefix}{Right}{Down}f^
forbidwoodenbolts: {ammoprefix}{Right}{Down 2}{Right}&^
forbidbonebolts: {ammoprefix}{Right}{Down 2}{Right}{Down}&^
##################################
# bar stockpile adjustments
##################################
barsprefix: s{Down 8}
enablebars: {barsprefix}e^
disablebars: {barsprefix}d^
bars: {barsprefix}b{Right}p{Down}p^
metalbars: {barsprefix}b{Right}p^
ironbars: {barsprefix}b{Right 2}&^
steelbars: {barsprefix}b{Right 2}{Down 8}&^
pigironbars: {barsprefix}b{Right 2}{Down 9}&^
otherbars: {barsprefix}b{Right}{Down}p^
coal: {barsprefix}b{Right}{Down}{Right}&^
potash: {barsprefix}b{Right}{Down}{Right}{Down}&^
ash: {barsprefix}b{Right}{Down}{Right}{Down 2}&^
pearlash: {barsprefix}b{Right}{Down}{Right}{Down 3}&^
soap: {barsprefix}b{Right}{Down}{Right}{Down 4}&^
blocks: {barsprefix}b{Down 2}p{Down}p{Down}p^
forbidbars: {barsprefix}{Right}f{Down}f^
forbidmetalbars: {barsprefix}{Right}f^
forbidironbars: {barsprefix}{Right 2}&^
forbidsteelbars: {barsprefix}{Right 2}{Down 8}&^
forbidpigironbars: {barsprefix}{Right 2}{Down 9}&^
forbidotherbars: {barsprefix}{Right}{Down}f^
forbidcoal: {barsprefix}{Right}{Down}{Right}&^
forbidpotash: {barsprefix}{Right}{Down}{Right}{Down}&^
forbidash: {barsprefix}{Right}{Down}{Right}{Down 2}&^
forbidpearlash: {barsprefix}{Right}{Down}{Right}{Down 3}&^
forbidsoap: {barsprefix}{Right}{Down}{Right}{Down 4}&^
forbidblocks: {barsprefix}{Down 2}f{Down}f{Down}f^
##################################
# gem stockpile adjustments
##################################
gemsprefix: s{Down 9}
enablegems: {gemsprefix}e^
disablegems: {gemsprefix}d^
roughgems: {gemsprefix}b{Right}p^
roughglass: {gemsprefix}b{Right}{Down}p^
cutgems: {gemsprefix}b{Right}{Down 2}p^
cutglass: {gemsprefix}b{Right}{Down 3}p^
cutstone: {gemsprefix}b{Right}{Down 4}p^
forbidroughgems: {gemsprefix}{Right}f^
forbidroughglass: {gemsprefix}{Right}{Down}f^
forbidcutgems: {gemsprefix}{Right}{Down 2}f^
forbidcutglass: {gemsprefix}{Right}{Down 3}f^
forbidcutstone: {gemsprefix}{Right}{Down 4}f^
#######################################
# finished goods stockpile adjustments
#######################################
finishedgoodsprefix: s{Down 10}
enablefinishedgoods: {finishedgoodsprefix}e^
disablefinishedgoods: {finishedgoodsprefix}d^
jugs: {finishedgoodsprefix}{Right}f{Right}{Up 2}&{Left}{Down 2}f{Down}f{Down}f^
##################################
# cloth
##################################
clothprefix: s{Down 12}
enablecloth: {clothprefix}e^
disablecloth: {clothprefix}d^
thread: {clothprefix}b{Right}p{Down}p{Down}p^
adamantinethread: {clothprefix}b{Right}{Down 3}p^
cloth: {clothprefix}b{Right}{Down 4}p{Down}p{Down}p^
adamantinecloth: {clothprefix}b{Right}{Up}p^
##################################
# weapon stockpile adjustments
##################################
weaponsprefix: s{Down 14}
enableweapons: {weaponsprefix}e^
disableweapons: {weaponsprefix}d^
metalweapons: {forbidtrapcomponents}{forbidstoneweapons}{forbidotherweapons}
ironweapons: {metalweapons}{forbidweapons}{permitironweapons}
copperweapons: {metalweapons}{forbidweapons}{permitcopperweapons}
steelweapons: {metalweapons}{forbidweapons}{permitsteelweapons}
forbidweapons: {weaponsprefix}{Right}f^
forbidtrapcomponents: {weaponsprefix}{Right}{Down}f^
forbidmetalweapons: {weaponsprefix}{Right}{Down 2}f^
forbidstoneweapons: {weaponsprefix}{Right}{Down 3}f^
forbidotherweapons: {weaponsprefix}{Right}{Down 4}f^
forbidironweapons: {weaponsprefix}{Right}{Down 2}{Right}&^
forbidcopperweapons: {weaponsprefix}{Right}{Down 2}{Right}{Down 3}&^
forbidsteelweapons: {weaponsprefix}{Right}{Down 2}{Right}{Down 8}&^
permitweapons: {weaponsprefix}{Right}p^
permittrapcomponents: {weaponsprefix}{Right}{Down}p^
permitmetalweapons: {weaponsprefix}{Right}{Down 2}p^
permitstoneweapons: {weaponsprefix}{Right}{Down 3}p^
permitotherweapons: {weaponsprefix}{Right}{Down 4}p^
permitironweapons: {forbidironweapons}
permitcopperweapons: {forbidcopperweapons}
permitsteelweapons: {forbidsteelweapons}
masterworkweapons: {weaponsprefix}{Right}{Down 5}f{Right}{Down 5}&^
artifactweapons: {weaponsprefix}{Right}{Down 5}f{Right}{Down 6}&^
forbidmasterworkweapons: {weaponsprefix}{Right}{Down 5}{Right}{Down 5}&^
forbidartifactweapons: {weaponsprefix}{Right}{Down 5}{Right}{Down 6}&^
permitmasterworkweapons: {forbidmasterworkweapons}
permitartifactweapons: {forbidartifactweapons}
##################################
# armor stockpile adjustments
##################################
armorprefix: s{Down 15}
enablearmor: {armorprefix}e^
disablearmor: {armorprefix}d^
metalarmor: {forbidotherarmor}
otherarmor: {forbidmetalarmor}
ironarmor: {metalarmor}{forbidmetalarmor}{permitironarmor}
copperarmor: {metalarmor}{forbidmetalarmor}{permitcopperarmor}
steelarmor: {metalarmor}{forbidmetalarmor}{permitsteelarmor}
forbidmetalarmor: {armorprefix}{Right}{Down 6}f^
forbidotherarmor: {armorprefix}{Right}{Down 7}f^
forbidironarmor: {armorprefix}{Right}{Down 6}{Right}&^
forbidcopperarmor: {armorprefix}{Right}{Down 6}{Right}{Down 3}&^
forbidsteelarmor: {armorprefix}{Right}{Down 6}{Right}{Down 8}&^
permitmetalarmor: {armorprefix}{Right}{Down 6}p^
permitotherarmor: {armorprefix}{Right}{Down 7}p^
permitironarmor: {forbidironarmor}
permitcopperarmor: {forbidcopperarmor}
permitsteelarmor: {forbidsteelarmor}
masterworkarmor: {armorprefix}{Right}{Down 8}f{Right}{Down 5}&^
artifactarmor: {armorprefix}{Right}{Down 8}f{Right}{Down 6}&^
forbidmasterworkarmor: {armorprefix}{Right}{Down 8}{Right}{Down 5}&^
forbidartifactarmor: {armorprefix}{Right}{Down 8}{Right}{Down 6}&^
permitmasterworkarmor: {forbidmasterworkarmor}
permitartifactarmor: {forbidartifactarmor}
##################################
# others
##################################
coinsprefix: s{Down 7}
enablecoins: {coinsprefix}e^
disablecoins: {coinsprefix}d^
leatherprefix: s{Down 11}
enableleather: {leatherprefix}e^
disableleather: {leatherprefix}d^
woodprefix: s{Down 13}
enablewood: {woodprefix}e^
disablewood: {woodprefix}d^
sheetprefix: s{Down 16}
enablesheet: {sheetprefix}e^
disablesheet: {sheetprefix}d^
##################################
# farm plots
##################################
# Sets a farm plot to grow the LAST type of seed in the list of available seeds
# for all 4 seasons. The last seed is used because it's usually Plump helmet
# spawn, suitable for post-embark. If you only have 1 seed type, that'll be
# grown.
growlastcropall: a/&b/&c/&d/&
# Like growlastcropall but grows the first one in the list instead.
growfirstcropall: a&b&c&d&

@ -17,3 +17,48 @@ option(CLSOCKET_SHARED "Build clsocket lib as shared." OFF)
option(CLSOCKET_DEP_ONLY "Build for use inside other CMake projects as dependency." ON) option(CLSOCKET_DEP_ONLY "Build for use inside other CMake projects as dependency." ON)
add_subdirectory(clsocket) add_subdirectory(clsocket)
ide_folder(clsocket "Depends") ide_folder(clsocket "Depends")
# set the default values of libexpat options - the descriptions are left empty
# because later option() calls *do* override those
set(EXPAT_BUILD_EXAMPLES OFF CACHE BOOL "")
set(EXPAT_BUILD_TESTS OFF CACHE BOOL "")
set(EXPAT_BUILD_TOOLS OFF CACHE BOOL "")
set(EXPAT_SHARED_LIBS OFF CACHE BOOL "")
set(EXPAT_BUILD_DOCS OFF CACHE BOOL "")
set(EXPAT_ENABLE_INSTALL OFF CACHE BOOL "")
add_subdirectory(libexpat/expat)
set(LIBZIP_BUILD_DOC OFF CACHE BOOL "")
set(LIBZIP_BUILD_EXAMPLES OFF CACHE BOOL "")
set(LIBZIP_BUILD_REGRESS OFF CACHE BOOL "")
set(LIBZIP_BUILD_SHARED_LIBS OFF CACHE BOOL "")
set(LIBZIP_BUILD_TOOLS OFF CACHE BOOL "")
set(LIBZIP_ENABLE_BZIP2 OFF CACHE BOOL "")
set(LIBZIP_ENABLE_COMMONCRYPTO OFF CACHE BOOL "")
set(LIBZIP_ENABLE_GNUTLS OFF CACHE BOOL "")
set(LIBZIP_ENABLE_LZMA OFF CACHE BOOL "")
set(LIBZIP_ENABLE_MBEDTLS OFF CACHE BOOL "")
set(LIBZIP_ENABLE_OPENSSL OFF CACHE BOOL "")
set(LIBZIP_ENABLE_WINDOWS_CRYPTO OFF CACHE BOOL "")
set(LIBZIP_DO_INSTALL OFF CACHE BOOL "")
add_subdirectory(libzip)
if(MSVC)
target_compile_options(zip PRIVATE /wd4244)
endif()
set(XLSXIO_USE_DFHACK_LIBS ON CACHE BOOL "")
set(XLSXIO_BUILD_STATIC ON CACHE BOOL "")
set(XLSXIO_BUILD_SHARED OFF CACHE BOOL "")
set(XLSXIO_BUILD_DOCUMENTATION OFF CACHE BOOL "")
set(XLSXIO_BUILD_EXAMPLES OFF CACHE BOOL "")
set(XLSXIO_BUILD_TOOLS OFF CACHE BOOL "")
set(XLSXIO_WITH_LIBZIP ON CACHE BOOL "")
set(XLSXIO_ZLIB_DIR "${ZLIB_DIR}" CACHE PATH "")
set(XLSXIO_LIBZIP_DIR "${CMAKE_CURRENT_BINARY_DIR}/libzip" CACHE PATH "")
set(XLSXIO_EXPAT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libexpat" CACHE PATH "")
set(XLSXIO_ENABLE_INSTALL OFF CACHE BOOL "")
add_subdirectory(xlsxio)
if(MSVC)
target_compile_options(xlsxio_read_STATIC PRIVATE /wd4013 /wd4244)
target_compile_options(xlsxio_write_STATIC PRIVATE /wd4013 /wd4244)
endif()

@ -0,0 +1 @@
Subproject commit 3c0f2e86ce4e7a3a3b30e765087d02a68bba7e6f

@ -0,0 +1 @@
Subproject commit be76fa5086bfe6b1a5e83c9855e39f98edc1f066

@ -32,6 +32,7 @@
// Based on original Protocol Buffers design by // Based on original Protocol Buffers design by
// Sanjay Ghemawat, Jeff Dean, and others. // Sanjay Ghemawat, Jeff Dean, and others.
#include <fstream>
#include <stack> #include <stack>
#include <google/protobuf/stubs/hash.h> #include <google/protobuf/stubs/hash.h>

@ -1,5 +1,5 @@
project(dfhack-tinythread) project(dfhack-tinythread)
add_library(dfhack-tinythread STATIC EXCLUDE_FROM_ALL tinythread.cpp tinythread.h fast_mutex.h) add_library(dfhack-tinythread STATIC EXCLUDE_FROM_ALL tinythread.cpp tinythread.h)
if(UNIX) if(UNIX)
target_link_libraries(dfhack-tinythread pthread) target_link_libraries(dfhack-tinythread pthread)
endif() endif()

@ -1,249 +0,0 @@
/* -*- mode: c++; tab-width: 2; indent-tabs-mode: nil; -*-
Copyright (c) 2010-2012 Marcus Geelnard
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
*/
#ifndef _FAST_MUTEX_H_
#define _FAST_MUTEX_H_
/// @file
// Which platform are we on?
#if !defined(_TTHREAD_PLATFORM_DEFINED_)
#if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__)
#define _TTHREAD_WIN32_
#else
#define _TTHREAD_POSIX_
#endif
#define _TTHREAD_PLATFORM_DEFINED_
#endif
// Check if we can support the assembly language level implementation (otherwise
// revert to the system API)
#if (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) || \
(defined(_MSC_VER) && (defined(_M_IX86) /*|| defined(_M_X64)*/)) || \
(defined(__GNUC__) && (defined(__ppc__)))
#define _FAST_MUTEX_ASM_
#else
#define _FAST_MUTEX_SYS_
#endif
#if defined(_TTHREAD_WIN32_)
#define NOMINMAX
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#define __UNDEF_LEAN_AND_MEAN
#endif
#include <windows.h>
#ifdef __UNDEF_LEAN_AND_MEAN
#undef WIN32_LEAN_AND_MEAN
#undef __UNDEF_LEAN_AND_MEAN
#endif
#else
#ifdef _FAST_MUTEX_ASM_
#include <sched.h>
#else
#include <pthread.h>
#endif
#endif
namespace tthread {
/// Fast mutex class.
/// This is a mutual exclusion object for synchronizing access to shared
/// memory areas for several threads. It is similar to the tthread::mutex class,
/// but instead of using system level functions, it is implemented as an atomic
/// spin lock with very low CPU overhead.
///
/// The \c fast_mutex class is NOT compatible with the \c condition_variable
/// class (however, it IS compatible with the \c lock_guard class). It should
/// also be noted that the \c fast_mutex class typically does not provide
/// as accurate thread scheduling as a the standard \c mutex class does.
///
/// Because of the limitations of the class, it should only be used in
/// situations where the mutex needs to be locked/unlocked very frequently.
///
/// @note The "fast" version of this class relies on inline assembler language,
/// which is currently only supported for 32/64-bit Intel x86/AMD64 and
/// PowerPC architectures on a limited number of compilers (GNU g++ and MS
/// Visual C++).
/// For other architectures/compilers, system functions are used instead.
class fast_mutex {
public:
/// Constructor.
#if defined(_FAST_MUTEX_ASM_)
fast_mutex() : mLock(0) {}
#else
fast_mutex()
{
#if defined(_TTHREAD_WIN32_)
InitializeCriticalSection(&mHandle);
#elif defined(_TTHREAD_POSIX_)
pthread_mutex_init(&mHandle, NULL);
#endif
}
#endif
#if !defined(_FAST_MUTEX_ASM_)
/// Destructor.
~fast_mutex()
{
#if defined(_TTHREAD_WIN32_)
DeleteCriticalSection(&mHandle);
#elif defined(_TTHREAD_POSIX_)
pthread_mutex_destroy(&mHandle);
#endif
}
#endif
/// Lock the mutex.
/// The method will block the calling thread until a lock on the mutex can
/// be obtained. The mutex remains locked until \c unlock() is called.
/// @see lock_guard
inline void lock()
{
#if defined(_FAST_MUTEX_ASM_)
bool gotLock;
do {
gotLock = try_lock();
if(!gotLock)
{
#if defined(_TTHREAD_WIN32_)
Sleep(0);
#elif defined(_TTHREAD_POSIX_)
sched_yield();
#endif
}
} while(!gotLock);
#else
#if defined(_TTHREAD_WIN32_)
EnterCriticalSection(&mHandle);
#elif defined(_TTHREAD_POSIX_)
pthread_mutex_lock(&mHandle);
#endif
#endif
}
/// Try to lock the mutex.
/// The method will try to lock the mutex. If it fails, the function will
/// return immediately (non-blocking).
/// @return \c true if the lock was acquired, or \c false if the lock could
/// not be acquired.
inline bool try_lock()
{
#if defined(_FAST_MUTEX_ASM_)
int oldLock;
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
asm volatile (
"movl $1,%%eax\n\t"
"xchg %%eax,%0\n\t"
"movl %%eax,%1\n\t"
: "=m" (mLock), "=m" (oldLock)
:
: "%eax", "memory"
);
#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
int *ptrLock = &mLock;
__asm {
mov eax,1
mov ecx,ptrLock
xchg eax,[ecx]
mov oldLock,eax
}
#elif defined(__GNUC__) && (defined(__ppc__))
int newLock = 1;
asm volatile (
"\n1:\n\t"
"lwarx %0,0,%1\n\t"
"cmpwi 0,%0,0\n\t"
"bne- 2f\n\t"
"stwcx. %2,0,%1\n\t"
"bne- 1b\n\t"
"isync\n"
"2:\n\t"
: "=&r" (oldLock)
: "r" (&mLock), "r" (newLock)
: "cr0", "memory"
);
#endif
return (oldLock == 0);
#else
#if defined(_TTHREAD_WIN32_)
return TryEnterCriticalSection(&mHandle) ? true : false;
#elif defined(_TTHREAD_POSIX_)
return (pthread_mutex_trylock(&mHandle) == 0) ? true : false;
#endif
#endif
}
/// Unlock the mutex.
/// If any threads are waiting for the lock on this mutex, one of them will
/// be unblocked.
inline void unlock()
{
#if defined(_FAST_MUTEX_ASM_)
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
asm volatile (
"movl $0,%%eax\n\t"
"xchg %%eax,%0\n\t"
: "=m" (mLock)
:
: "%eax", "memory"
);
#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
int *ptrLock = &mLock;
__asm {
mov eax,0
mov ecx,ptrLock
xchg eax,[ecx]
}
#elif defined(__GNUC__) && (defined(__ppc__))
asm volatile (
"sync\n\t" // Replace with lwsync where possible?
: : : "memory"
);
mLock = 0;
#endif
#else
#if defined(_TTHREAD_WIN32_)
LeaveCriticalSection(&mHandle);
#elif defined(_TTHREAD_POSIX_)
pthread_mutex_unlock(&mHandle);
#endif
#endif
}
private:
#if defined(_FAST_MUTEX_ASM_)
int mLock;
#else
#if defined(_TTHREAD_WIN32_)
CRITICAL_SECTION mHandle;
#elif defined(_TTHREAD_POSIX_)
pthread_mutex_t mHandle;
#endif
#endif
};
}
#endif // _FAST_MUTEX_H_

@ -46,7 +46,6 @@ freely, subject to the following restrictions:
/// @li tthread::recursive_mutex /// @li tthread::recursive_mutex
/// @li tthread::condition_variable /// @li tthread::condition_variable
/// @li tthread::lock_guard /// @li tthread::lock_guard
/// @li tthread::fast_mutex
/// ///
/// @section misc_sec Miscellaneous /// @section misc_sec Miscellaneous
/// The following special keywords are available: #thread_local. /// The following special keywords are available: #thread_local.

@ -0,0 +1 @@
Subproject commit 4056226fe0df6bff4593ee2353cca07c2b7f327e

@ -0,0 +1,106 @@
# Aliases for quickfort #query mode blueprints
#
# This file defines custom keycode shortcuts for #query mode blueprints.
# Definitions in this file take precedence over any definitions in the baseline
# aliases configuration file at hack/data/quickfort/aliases-common.txt. See that
# file for the many useful aliases that are already defined.
#
# If possible, build on the baseline aliases when defining your own aliases. If
# the DF UI screens change, updated baseline aliases may allow your aliases to
# automatically adapt to the new UI. For example, if you create an alias to
# modify particular furniture stockpile settings, start your alias with
# "{furnitureprefix}" instead of manually writing "s{Down 2}". Then, if the
# location of the furniture setting changes, your alias will automatically
# inherit the updated position when DFHack is updated.
#
# Aliases simplify repetitive tasks, such as configuring workshop profiles or
# adjusting a food stockpile to accept only seeds. Making new aliases is just a
# matter of mimicking the keys used to navigate through the menus and select
# options. Use the aliases in your blueprint spreadsheets by writing an alias by
# itself in a cell, like "nocontainers", or reference an alias in a larger
# sequence by enclosing it in curly brackets, like "{nocontainers}{linksonly}"
#
# For example, say you have the following build and place blueprints:
#
# #build masonry workshop
# ~, ~,~,`,`,`
# ~,wm,~,`,`,`
# ~, ~,~,`,`,`
#
# #place stockpile for mason
# ~,~,~,s,s,s
# ~,~,~,s,s,s
# ~,~,~,s,s,s
#
# and you want to configure the stockpile to hold only non-economic ("other")
# stone and to give to the adjacent mason workshop. You could write the
# keystrokes directly:
#
# #query start(4;1;upper left corner of stockpile) configure mason
# ~,~,~,s{Down 5}deb{Right}{Down 2}p^,`,`
# ~,~,~,g{Left 2}&, `,`
# ~,~,~,`, `,`
#
# or you could use alias names:
#
# #query start(4;1;upper left corner of stockpile) configure mason
# ~,~,~,otherstone,`,`
# ~,~,~,give2left, `,`
# ~,~,~,`, `,`
#
# you can combine the two aliases above into a single cell as well, if desired:
#
# #query start(4;1;upper left corner of stockpile) configure mason
# ~,~,~,{otherstone}{give2left},`,`
# ~,~,~,`, `,`
# ~,~,~,`, `,`
#
# The syntax for defining aliases is:
# aliasname: keystrokes
#
# Where aliasname is at least two letters or digits long (including dashes and
# underscores) and keystrokes are whatever you would type into the DF UI. A
# keystroke can also be a named keycode from the DF interface definition file
# (data/init/interface.txt), enclosed in curly brackets like an alias, like:
# "{Right}" or "{Enter}". In # order to avoid naming conflicts between aliases
# and keycodes, the convention is to start aliases with a lowercase letter.
#
# Anything enclosed within curly brackets can also have a number after it,
# indicating how many times that alias or keycode should be repeated. For
# example: "{togglesequence 9}" or "{Down 5}".
#
# Finally, you can specify sub-aliases that will only be defined while the
# current alias is being resolved by adding them after the alias name (but
# before the repetition number, if it is specified), for example:
# {quantumstopfromeast name="Trash Dump"}
# The value of the sub-alias 'name' is used by quantumstopfromeast (or one of
# the aliases it calls) to give a useful name to your quantum dump hauling
# route. You can also use this format to temporarily override the value of an
# existing regularly-defined alias.
#
# Sub-aliases must be in one of the following formats:
# subaliasname=valwithnospaces
# subaliasname="val with spaces"
# subaliasname={someotheralias repetitions}
#
# Ctrl, Alt, and Shift modifiers can be specified for the next keycode by adding
# them into the key sequence. For example, Alt-h is written as "{Alt}h".
#
# Some frequently-used keystrokes are assigned shorthand characters. Think of
# them as single-character aliases that don't need to be surrounded in curly
# brackets:
# & expands to {Enter}
# @ expands to {Shift}{Enter}
# ~ expands to {Alt}
# ! expands to {Ctrl}
# ^ expands to {ESC}
#
# There is also a non-standard alias built into the code for the common
# shorthand for "make room":
# r+ expands to r+&
#
# If you need literal verisons of the shorthand characters, surround them in
# curly brackets, for example: "{!}"
#
#
# Add your custom aliases here:

@ -0,0 +1,37 @@
# quickfort main configuration file
#
# Set startup defaults for the quickfort script in this file. Settings can be
# temporarily overridden in the active session with the `quickfort set` command.
#
# If you have edited this file but want to revert to "factory defaults", delete
# this file and a fresh one will be copied from
# dfhack-config/default/quickfort/quickfort.txt the next time you start DFHack.
# Directory tree to search for blueprints. Can be set to an absolute or relative
# path. If set to a relative path, resolves to a directory under the DF folder.
# Note that if you change this directory, you will not automatically pick up
# blueprints written by the DFHack "blueprint" plugin (which always writes to
# the "blueprints" dir).
blueprints_dir=blueprints
# Set to "true" or "false". If true, will designate all dig blueprints in marker
# mode. If false, only cells with dig codes explicitly prefixed with an "m" will
# be designated in marker mode.
force_marker_mode=false
# Skip query blueprint sanity checks that detect common blueprint errors and
# halt or skip keycode playback. Checks include ensuring a configurable building
# exists at the designated cursor position and verifying the active UI screen is
# the same before and after sending keys for the cursor position. Temporarily
# enable this if you are running a query blueprint that sends a key sequence
# that is *not* related to stockpile or building configuration.
query_unsafe=false
# Set to the maximum number of resources you want assigned to stockpiles of the
# relevant types. Set to -1 for DF defaults (number of stockpile tiles for
# stockpiles that take barrels and bins, 1 wheelbarrow for stone stockpiles).
# The default here for wheelbarrows is 0 since using wheelbarrows normally
# *decreases* the efficiency of your fort.
stockpiles_max_barrels=-1
stockpiles_max_bins=-1
stockpiles_max_wheelbarrows=0

@ -245,6 +245,7 @@ enable \
dwarfmonitor \ dwarfmonitor \
mousequery \ mousequery \
autogems \ autogems \
autodump \
automelt \ automelt \
autotrade \ autotrade \
buildingplan \ buildingplan \

@ -25,6 +25,7 @@ belal jimhester
Ben Lubar BenLubar Ben Lubar BenLubar
Ben Rosser TC01 Ben Rosser TC01
billw2012 billw2012 billw2012 billw2012
BrickViking brickviking
brndd brndd burneddi brndd brndd burneddi
Bumber Bumber64 Bumber Bumber64
Caldfir caldfir Caldfir caldfir
@ -32,6 +33,7 @@ Carter Bray Qartar
Chris Dombroski cdombroski Chris Dombroski cdombroski
Clayton Hughes Clayton Hughes
Clément Vuchener cvuchener Clément Vuchener cvuchener
daedsidog daedsidog
Dan Amlund danamlund Dan Amlund danamlund
Daniel Brooks db48x Daniel Brooks db48x
David Nilsolm David Nilsolm
@ -42,6 +44,7 @@ Deon
DoctorVanGogh DoctorVanGogh DoctorVanGogh DoctorVanGogh
Donald Ruegsegger hashaash Donald Ruegsegger hashaash
doomchild doomchild doomchild doomchild
ElMendukol ElMendukol
enjia2000 enjia2000
Eric Wald eswald Eric Wald eswald
Erik Youngren Artanis Erik Youngren Artanis
@ -50,14 +53,15 @@ expwnent expwnent
Feng Feng
figment figment figment figment
gchristopher gchristopher gchristopher gchristopher
George Murray GitOnUp
grubsteak grubsteak grubsteak grubsteak
Harlan Playford playfordh Harlan Playford playfordh
Hayati Ayguen hayguen Hayati Ayguen hayguen
Herwig Hochleitner bendlas Herwig Hochleitner bendlas
Ian S kremlin- Ian S kremlin-
IndigoFenix IndigoFenix
James Gilles kazimuth
James Logsdon jlogsdon James Logsdon jlogsdon
Japa JapaMala
Jared Adams Jared Adams
Jeremy Apthorp nornagon Jeremy Apthorp nornagon
Jim Lisi stonetoad Jim Lisi stonetoad
@ -73,6 +77,7 @@ kane-t kane-t
Kelly Kinkade ab9rf Kelly Kinkade ab9rf
KlonZK KlonZK KlonZK KlonZK
Kris Parker kaypy Kris Parker kaypy
Kristjan Moore kristjanmoore
Kromtec Kromtec Kromtec Kromtec
Kurik Amudnil Kurik Amudnil
Lethosor lethosor Lethosor lethosor
@ -98,6 +103,7 @@ Milo Christiansen milochristiansen
MithrilTuxedo MithrilTuxedo MithrilTuxedo MithrilTuxedo
mizipzor mizipzor mizipzor mizipzor
moversti moversti moversti moversti
Myk Taylor myk002
napagokc napagokc napagokc napagokc
Neil Little nmlittle Neil Little nmlittle
Nick Rart nickrart comestible Nick Rart nickrart comestible
@ -106,6 +112,8 @@ Nikolay Amiantov abbradar
nocico nocico nocico nocico
Omniclasm Omniclasm
OwnageIsMagic OwnageIsMagic OwnageIsMagic OwnageIsMagic
palenerd dlmarquis
PassionateAngler PassionateAngler
Patrik Lundell PatrikLundell Patrik Lundell PatrikLundell
Paul Fenwick pjf Paul Fenwick pjf
PeridexisErrant PeridexisErrant PeridexisErrant PeridexisErrant
@ -117,6 +125,7 @@ Priit Laes plaes
Putnam Putnam3145 Putnam Putnam3145
Quietust quietust _Q Quietust quietust _Q
Raidau Raidau Raidau Raidau
Ralph Bisschops ralpha
Ramblurr Ramblurr Ramblurr Ramblurr
rampaging-poet rampaging-poet
Raoul van Putten Raoul van Putten
@ -127,15 +136,18 @@ Rinin Rinin
rndmvar rndmvar rndmvar rndmvar
Robert Heinrich rh73 Robert Heinrich rh73
Robert Janetzko robertjanetzko Robert Janetzko robertjanetzko
Rocco Moretti roccomoretti
RocheLimit RocheLimit
rofl0r rofl0r rofl0r rofl0r
root root
Rose RosaryMala
Roses Pheosics Roses Pheosics
Ross M RossM Ross M RossM
rout rout
rubybrowncoat rubybrowncoat rubybrowncoat rubybrowncoat
Rumrusher rumrusher Rumrusher rumrusher
RusAnon RusAnon RusAnon RusAnon
Ryan Bennitt ryanbennitt
sami sami
scamtank scamtank scamtank scamtank
Sebastian Wolfertz Enkrod Sebastian Wolfertz Enkrod
@ -158,6 +170,7 @@ Timothy Collett danaris
Timur Kelman TymurGubayev Timur Kelman TymurGubayev
Tom Jobbins TheBloke Tom Jobbins TheBloke
Tom Prince Tom Prince
Tommy R tommy
TotallyGatsby TotallyGatsby TotallyGatsby TotallyGatsby
Travis Hoppe thoppe orthographic-pedant Travis Hoppe thoppe orthographic-pedant
txtsd txtsd txtsd txtsd
@ -165,7 +178,7 @@ U-glouglou\\simon
Valentin Ochs Cat-Ion Valentin Ochs Cat-Ion
Vitaly Pronkin pronvit mifki Vitaly Pronkin pronvit mifki
ViTuRaS ViTuRaS ViTuRaS ViTuRaS
Vjek Vjek vjek
Warmist warmist Warmist warmist
Wes Malone wesQ3 Wes Malone wesQ3
Will Rogers wjrogers Will Rogers wjrogers

@ -15,7 +15,8 @@ the `binpatch` command.
at all possible - that way your work will work for many versions at all possible - that way your work will work for many versions
across multiple operating systems. across multiple operating systems.
.. contents:: .. contents:: Contents
:local:
Getting a patch Getting a patch
@ -24,7 +25,7 @@ There are no binary patches available for Dwarf Fortress versions after 0.34.11.
This system is kept for the chance that someone will find it useful, so some This system is kept for the chance that someone will find it useful, so some
hints on how to write your own follow. This will require disassembly and hints on how to write your own follow. This will require disassembly and
decent skill in `memory research <contributing-memory-research>`. decent skill in `memory research <memory-research>`.
* The patches are expected to be encoded in text format used by IDA. * The patches are expected to be encoded in text format used by IDA.
@ -79,7 +80,9 @@ system console:
If you use a permanent patch under OSX or Linux, you must update If you use a permanent patch under OSX or Linux, you must update
``symbols.xml`` with the new checksum of the executable. Find the relevant ``symbols.xml`` with the new checksum of the executable. Find the relevant
section, and add a new line:: section, and add a new line:
.. code-block:: xml
<md5-hash value='????????????????????????????????'/> <md5-hash value='????????????????????????????????'/>

@ -1,48 +1,84 @@
.. highlight:: shell
.. _compile:
################ ################
Compiling DFHack Compiling DFHack
################ ################
You don't need to compile DFHack unless you're developing plugins or working on the core. DFHack builds are available for all supported platforms; see `installing` for
installation instructions. If you are a DFHack end-user, modder, or plan on
writing scripts (not plugins), it is generally recommended (and easier) to use
these builds instead of compiling DFHack from source.
For users, modders, and authors of scripts it's better to download However, if you are looking to develop plugins, work on the DFHack core, make
and `install the latest release instead <installing>`. complex changes to DF-structures, or anything else that requires compiling
DFHack from source, this document will walk you through the build process. Note
that some steps may be unconventional compared to other projects, so be sure to
pay close attention if this is your first time compiling DFHack.
.. contents:: .. contents:: Contents
:depth: 2 :local:
:depth: 1
.. _compile-how-to-get-the-code: .. _compile-how-to-get-the-code:
How to get the code How to get the code
=================== ===================
DFHack doesn't have any kind of system of code snapshots in place, so you will have to DFHack uses Git for source control; instructions for installing Git can be found
get code from the GitHub repository using Git. How to get Git is described under in the platform-specific sections below. The code is hosted on
the instructions for each platform. `GitHub <https://github.com/DFHack/dfhack>`_, and can be downloaded with::
To get the latest release code (master branch)::
git clone --recursive https://github.com/DFHack/dfhack git clone --recursive https://github.com/DFHack/dfhack
cd dfhack cd dfhack
If your version of Git does not support the ``--recursive`` flag, you will need to omit it and run If your version of Git does not support the ``--recursive`` flag, you will need
``git submodule update --init`` after entering the dfhack directory. to omit it and run ``git submodule update --init`` after entering the dfhack
directory.
To get the latest development code (develop branch), clone as above and then:: This will check out the code on the default branch of the GitHub repo, currently
``develop``, which may be unstable. If you want code for the latest stable
release, you can check out the ``master`` branch instead::
git checkout develop git checkout master
git submodule update git submodule update
Generally, you should only need to clone DFHack once. In general, a single DFHack clone is suitable for development - most Git
operations such as switching branches can be done on an existing clone. If you
**Important note regarding submodule update after pulling or changing branches**: find yourself cloning DFHack frequently as part of your development process, or
getting stuck on anything else Git-related, feel free to reach out to us for
You must run ``git submodule update`` every time you change branches, such as assistance.
when switching between the master and develop branches or vice versa. You also
must run it after pulling any changes to submodules from the DFHack repo. If a .. admonition:: A note on submodules
submodule only exists on the newer branch, or if a commit you just pulled
contains a new submodule, you need to run ``git submodule update --init``. DFHack uses submodules extensively to manage its subprojects (including the
Failure to do this may result in a variety of errors, including ``fatal: <path> ``scripts`` folder and DF-structures in ``library/xml``). Failing to keep
does not exist`` when using Git, errors when building DFHack, and ``not a known submodules in sync when switching between branches can result in build errors
DF version`` when starting DF. or scripts that don't work. In general, you should always update submodules
whenever you switch between branches in the main DFHack repo with
``git submodule update``. (If you are working on bleeding-edge DFHack and
have checked out the master branch of some submodules, running ``git pull``
in those submodules is also an option.)
Rarely, we add or remove submodules. If there are any changes to the existence
of submodules when you switch between branches, you should run
``git submodule update --init`` instead (adding ``--init`` to the above
command).
Some common errors that can arise when failing to update submodules include:
* ``fatal: <some path> does not exist`` when performing Git operations
* Build errors, particularly referring to structures in the ``df::`` namespace
or the ``library/include/df`` folder
* ``Not a known DF version`` when starting DF
* ``Run 'git submodule update --init'`` when running CMake
Submodules are a particularly confusing feature of Git. The
`Git Book <https://git-scm.com/book/en/v2/Git-Tools-Submodules>`_ has a
thorough explanation of them (as well as of many other aspects of Git) and
is a recommended resource if you run into any issues. Other DFHack developers
are also able to help with any submodule-related (or Git-related) issues
you may encounter.
**More notes**: **More notes**:
@ -51,18 +87,21 @@ DF version`` when starting DF.
Contributing to DFHack Contributing to DFHack
====================== ======================
If you want to get involved with the development, create an account on To contribute to DFHack on GitHub, you will need a GitHub account. Only some
GitHub, make a clone there and then use that as your remote repository instead. DFHack developers can push directly to the DFHack repositories; we recommend
making a fork of whatever repos you are interested in contributing to, making
We'd love that; join us on IRC_ (#dfhack channel on freenode) for discussion, changes there, and submitting pull requests. `GitHub's pull request tutorial
and whenever you need help. <https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/proposing-changes-to-your-work-with-pull-requests>`_
is a good resource for getting started with pull requests (some things to note:
our work mainly happens on the ``develop`` branch, and you will need to use
your own fork, assuming that you don't have write access to the DFHack repos).
.. _IRC: https://webchat.freenode.net/?channels=dfhack Most development-related discussion happens on IRC or in individual GitHub
issues and pull requests, but there are also other ways to reach out - see
`support` for details.
(Note: for submodule issues, please see the above instructions first!) For more details on contributing to DFHack, including pull requests, code
format, and more, please see `contributing-code`.
For lots more details on contributing to DFHack, including pull requests, code format,
and more, please see `contributing-code`.
Build settings Build settings
@ -75,10 +114,11 @@ in the platform-specific sections below first, then come back here.
Generator Generator
--------- ---------
The ``Ninja`` CMake build generator is the prefered build method on Linux and The ``Ninja`` CMake build generator is the preferred build method on Linux and
macOS, instead of ``Unix Makefiles``, which is the default. You can select Ninja macOS, instead of ``Unix Makefiles``, which is the default. You can select Ninja
by passing ``-G Ninja`` to CMake. Incremental builds using Unix Makefiles can be by passing ``-G Ninja`` to CMake. Incremental builds using Unix Makefiles can be
much slower than Ninja builds. much slower than Ninja builds. Note that you will probably need to install
Ninja; see the platform-specific sections for details.
:: ::
@ -126,6 +166,8 @@ in any case.
Note that the scripts in the "build" folder on Windows will set the architecture Note that the scripts in the "build" folder on Windows will set the architecture
automatically. automatically.
.. _compile-build-options:
Other settings Other settings
-------------- --------------
There are a variety of other settings which you can find in CMakeCache.txt in There are a variety of other settings which you can find in CMakeCache.txt in
@ -133,6 +175,9 @@ your build folder or by running ``ccmake`` (or another CMake GUI). Most
DFHack-specific settings begin with ``BUILD_`` and control which parts of DFHack DFHack-specific settings begin with ``BUILD_`` and control which parts of DFHack
are built. are built.
.. _compile-linux:
Linux Linux
===== =====
On Linux, DFHack acts as a library that shadows parts of the SDL API using LD_PRELOAD. On Linux, DFHack acts as a library that shadows parts of the SDL API using LD_PRELOAD.
@ -144,13 +189,18 @@ DFHack is meant to be installed into an existing DF folder, so get one ready.
We assume that any Linux platform will have ``git`` available (though it may We assume that any Linux platform will have ``git`` available (though it may
need to be installed with your package manager.) need to be installed with your package manager.)
To build DFHack you need GCC version 4.8 or later. GCC 4.8 is easiest to work To build DFHack, you need GCC 4.8 or newer. GCC 4.8 has the benefit of avoiding
with due to avoiding libstdc++ issues (see below), but any version from 4.8 `libstdc++ compatibility issues <linux-incompatible-libstdcxx>`, but can be hard
onwards (including 5.x) will work. to obtain on modern distributions, and working around these issues is done
automatically by the ``dfhack`` launcher script. As long as your system-provided
GCC is new enough, it should work. Note that extremely new GCC versions may not
have been used to build DFHack yet, so if you run into issues with these, please
let us know (e.g. by opening a GitHub issue).
Before you can build anything, you'll also need ``cmake``. It is advisable to Before you can build anything, you'll also need ``cmake``. It is advisable to
also get ``ccmake`` on distributions that split the cmake package into multiple also get ``ccmake`` on distributions that split the cmake package into multiple
parts. parts. As mentioned above, ``ninja`` is recommended (many distributions call
this package ``ninja-build``).
You will need pthread; most systems should have this already. Note that older You will need pthread; most systems should have this already. Note that older
CMake versions may have trouble detecting pthread, so if you run into CMake versions may have trouble detecting pthread, so if you run into
@ -226,37 +276,44 @@ This will show a curses-based interface that lets you set all of the
extra options. You can also use a cmake-friendly IDE like KDevelop 4 extra options. You can also use a cmake-friendly IDE like KDevelop 4
or the cmake-gui program. or the cmake-gui program.
.. _linux-incompatible-libstdcxx:
Incompatible libstdc++ Incompatible libstdc++
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
When compiling dfhack yourself, it builds against your system libstdc++. When When compiling DFHack yourself, it builds against your system libstdc++. When
Dwarf Fortress runs, it uses a libstdc++ shipped with the binary, which comes Dwarf Fortress runs, it uses a libstdc++ shipped in the ``libs`` folder, which
from GCC 4.8 and is incompatible with code compiled with newer GCC versions. If comes from GCC 4.8 and is incompatible with code compiled with newer GCC
you compile DFHack with a GCC version newer than 4.8, you will see an error versions. As of DFHack 0.42.05-alpha1, the ``dfhack`` launcher script attempts
message such as:: to fix this by automatically removing the DF-provided libstdc++ on startup.
In rare cases, this may fail and cause errors such as:
.. code-block:: text
./libs/Dwarf_Fortress: /pathToDF/libs/libstdc++.so.6: version ./libs/Dwarf_Fortress: /pathToDF/libs/libstdc++.so.6: version
`GLIBCXX_3.4.18' not found (required by ./hack/libdfhack.so) `GLIBCXX_3.4.18' not found (required by ./hack/libdfhack.so)
To fix this you can compile with GCC 4.8 or remove the libstdc++ shipped with The easiest way to fix this is generally removing the libstdc++ shipped with
DF, which causes DF to use your system libstdc++ instead:: DF, which causes DF to use your system libstdc++ instead::
cd /path/to/DF/ cd /path/to/DF/
rm libs/libstdc++.so.6 rm libs/libstdc++.so.6
Note that distributing binaries compiled with newer GCC versions requires end- Note that distributing binaries compiled with newer GCC versions may result in
users to delete libstdc++ themselves and have a libstdc++ on their system from the opposite compatibily issue: users with *older* GCC versions may encounter
the same GCC version or newer. For this reason, distributing anything compiled similar errors. This is why DFHack distributes both GCC 4.8 and GCC 7 builds. If
with GCC versions newer than 4.8 is discouraged. In the future we may start you are planning on distributing binaries to other users, we recommend using an
bundling a later libstdc++ as part of the DFHack package, so as to enable older GCC (but still at least 4.8) version if possible.
compilation-for-distribution with a GCC newer than 4.8.
Mac OS X .. _compile-macos:
========
DFHack functions similarly on OS X and Linux, and the majority of the macOS
information above regarding the build process (cmake and ninja) applies here =====
DFHack functions similarly on macOS and Linux, and the majority of the
information above regarding the build process (CMake and Ninja) applies here
as well. as well.
DFHack can officially be built on OS X with GCC 4.8 or 7. Anything newer than 7 DFHack can officially be built on macOS only with GCC 4.8 or 7. Anything newer than 7
will require you to perform extra steps to get DFHack to run (see `osx-new-gcc-notes`), will require you to perform extra steps to get DFHack to run (see `osx-new-gcc-notes`),
and your build will likely not be redistributable. and your build will likely not be redistributable.
@ -309,9 +366,9 @@ Dependencies and system set-up
cleaner, quicker, and smarter. For example, installing MacPort's GCC will cleaner, quicker, and smarter. For example, installing MacPort's GCC will
install more than twice as many dependencies as Homebrew's will, and all in install more than twice as many dependencies as Homebrew's will, and all in
both 32-bit and 64-bit variants. Homebrew also doesn't require constant use both 32-bit and 64-bit variants. Homebrew also doesn't require constant use
of sudo. of ``sudo``.
Using `Homebrew <http://brew.sh/>`_ (recommended):: Using `Homebrew <https://brew.sh/>`_ (recommended)::
brew tap homebrew/versions brew tap homebrew/versions
brew install git brew install git
@ -346,14 +403,14 @@ Dependencies and system set-up
* In a separate, local Perl install * In a separate, local Perl install
Rather than using system Perl, you might also want to consider Rather than using system Perl, you might also want to consider
the Perl manager, `Perlbrew <http://perlbrew.pl>`_. the Perl manager, `Perlbrew <https://perlbrew.pl>`_.
This manages Perl 5 locally under ``~/perl5/``, providing an easy This manages Perl 5 locally under ``~/perl5/``, providing an easy
way to install Perl and run CPAN against it without ``sudo``. way to install Perl and run CPAN against it without ``sudo``.
It can maintain multiple Perl installs and being local has the It can maintain multiple Perl installs and being local has the
benefit of easy migration and insulation from OS issues and upgrades. benefit of easy migration and insulation from OS issues and upgrades.
See http://perlbrew.pl/ for more details. See https://perlbrew.pl/ for more details.
Building Building
-------- --------
@ -378,9 +435,9 @@ Building
export CC=gcc-7 export CC=gcc-7
export CXX=g++-7 export CXX=g++-7
etc. (adjust as needed for different GCC installations)
* Build dfhack:: * Build DFHack::
mkdir build-osx mkdir build-osx
cd build-osx cd build-osx
@ -390,6 +447,7 @@ Building
<path to DF> should be a path to a copy of Dwarf Fortress, of the appropriate <path to DF> should be a path to a copy of Dwarf Fortress, of the appropriate
version for the DFHack you are building. version for the DFHack you are building.
.. _compile-windows: .. _compile-windows:
Windows Windows
@ -463,7 +521,7 @@ To install Chocolatey and the required dependencies:
You can now use all of these utilities from any normal ``cmd.exe`` window. You can now use all of these utilities from any normal ``cmd.exe`` window.
You only need Admin/elevated ``cmd.exe`` for running ``choco install`` commands; You only need Admin/elevated ``cmd.exe`` for running ``choco install`` commands;
for all other purposes, including compiling DFHack, you should use for all other purposes, including compiling DFHack, you should use
a normal ``cmd.exe`` (or, better, an improved terminal like `Cmder <http://cmder.net/>`_; a normal ``cmd.exe`` (or, better, an improved terminal like `Cmder <https://cmder.net/>`_;
details below, under Build.) details below, under Build.)
**NOTE**: you can run the above ``choco install`` command even if you already have **NOTE**: you can run the above ``choco install`` command even if you already have
@ -490,29 +548,31 @@ Some examples:
CMake CMake
^^^^^ ^^^^^
You can get the win32 installer version from You can get the win32 installer version from
`the official site <http://www.cmake.org/cmake/resources/software.html>`_. `the official site <https://cmake.org/download/>`_.
It has the usual installer wizard. Make sure you let it add its binary folder It has the usual installer wizard. Make sure you let it add its binary folder
to your binary search PATH so the tool can be later run from anywhere. to your binary search PATH so the tool can be later run from anywhere.
Perl / Strawberry Perl Perl / Strawberry Perl
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
For the code generation parts you'll need Perl 5 with XML::LibXML and XML::LibXSLT. For the code generation stage of the build process, you'll need Perl 5 with
`Strawberry Perl <http://strawberryperl.com>`_ is recommended as it includes XML::LibXML and XML::LibXSLT. `Strawberry Perl <http://strawberryperl.com>`_ is
all of the required packages in a single, easy install. recommended as it includes all of the required packages in a single, easy
install.
After install, ensure Perl is in your user's PATH. This can be edited from After install, ensure Perl is in your user's PATH. This can be edited from
``Control Panel -> System -> Advanced System Settings -> Environment Variables``. ``Control Panel -> System -> Advanced System Settings -> Environment Variables``.
The following three directories must be in PATH, in this order: The following directories must be in your PATH, in this order:
* ``<path to perl>\c\bin`` * ``<path to perl>\c\bin``
* ``<path to perl>\perl\site\bin`` * ``<path to perl>\perl\site\bin``
* ``<path to perl>\perl\bin`` * ``<path to perl>\perl\bin``
* ``<path to perl>\perl\vendor\lib\auto\XML\LibXML`` (may only be required on some systems)
Be sure to close and re-open any existing ``cmd.exe`` windows after updating Be sure to close and re-open any existing ``cmd.exe`` windows after updating
your PATH. your PATH.
If you already have a different version of Perl (for example the one from Cygwin), If you already have a different version of Perl installed (for example, from Cygwin),
you can run into some trouble. Either remove the other Perl install from PATH, or you can run into some trouble. Either remove the other Perl install from PATH, or
install XML::LibXML and XML::LibXSLT for it using CPAN. install XML::LibXML and XML::LibXSLT for it using CPAN.
@ -561,7 +621,7 @@ due to the tiny window size and extremely limited scrollback. For that reason yo
may prefer to compile in the IDE which will always show all build output. may prefer to compile in the IDE which will always show all build output.
Alternatively (or additionally), consider installing an improved Windows terminal Alternatively (or additionally), consider installing an improved Windows terminal
such as `Cmder <http://cmder.net/>`_. Easily installed through Chocolatey with: such as `Cmder <https://cmder.net/>`_. Easily installed through Chocolatey with:
``choco install cmder -y``. ``choco install cmder -y``.
**Note for Cygwin/msysgit users**: It is also possible to compile DFHack from a **Note for Cygwin/msysgit users**: It is also possible to compile DFHack from a
@ -607,129 +667,8 @@ Then build the ``INSTALL`` target listed under ``CMakePredefinedTargets``.
Building the documentation Building the documentation
========================== ==========================
DFHack documentation, like the file you are reading now, is created as .rst files, The steps above will not build DFHack's documentation by default. If you are
which are in `reStructuredText (reST) <http://sphinx-doc.org/rest.html>`_ format. editing documentation, see `documentation` for details on how to build it.
This is a documenation format that has come from the Python community. It is very
similar in concept - and in syntax - to Markdown, as found on GitHub and many other
places. However it is more advanced than Markdown, with more features available when
compiled to HTML, such as automatic tables of contents, cross-linking, special
external links (forum, wiki, etc) and more. The documentation is compiled by a
Python tool, `Sphinx <http://sphinx-doc.org>`_.
The DFHack build process will compile the documentation but this has been disabled
by default. You only need to build the docs if you're changing them, or perhaps
if you want a local HTML copy; otherwise, read them easily online at
`ReadTheDoc's DFHack hosted documentation <https://dfhack.readthedocs.org>`_.
(Note that even if you do want a local copy, it is certainly not necesesary to
compile the documentation in order to read it. Like Markdown, reST documents are
designed to be just as readable in a plain-text editor as they are in HTML format.
The main thing you lose in plain text format is hyperlinking.)
Enabling documentation building
-------------------------------
First, make sure you have followed all the necessary steps for your platform as
outlined in the rest of this document.
To compile documentation with DFHack, add the following flag to your ``cmake`` command::
-DBUILD_DOCS:bool=ON
For example::
cmake .. -DCMAKE_BUILD_TYPE:string=Release -DBUILD_DOCS:bool=ON -DCMAKE_INSTALL_PREFIX=<path to DF>
Alternatively you can use the CMake GUI which allows options to be changed easily.
On Windows you should either use ``generate-msvc-gui.bat`` and set the option
through the GUI, or else if you want to use an alternate file, such as
``generate-msvc-all.bat``, you will need to edit it to add the flag.
Or you could just run ``cmake`` on the command line like in other platforms.
Required dependencies
---------------------
In order to build the documentation, you must have Python with Sphinx
version 1.3.1 or later. Both Python 2.x and 3.x are supported.
When installing Sphinx from OS package managers, be aware that there is
another program called Sphinx, completely unrelated to documentation management.
Be sure you are installing the right Sphinx; it may be called ``python-sphinx``,
for example. To avoid doubt, ``pip`` can be used instead as detailed below.
Linux
-----
Most Linux distributions will include Python as standard.
Check your package manager to see if Sphinx 1.3.1 or later is available,
but at the time of writing Ubuntu for example only has 1.2.x.
You can instead install Sphinx with the pip package manager. This may need
to be installed from your OS package manager; this is the case on Ubuntu.
On Ubuntu/Debian, use the following to first install pip::
sudo apt-get install python-pip
Once pip is available, you can then install the Python Sphinx module with::
pip install sphinx
If you run this as a normal user it will install a local copy for your user only.
Run it with sudo if you want a system-wide install. Either is fine for DFHack,
however if installing locally do check that ``sphinx-build`` is in your path.
It may be installed in a directory such as ``~/.local/bin/``, so after pip
install, find ``sphinx-build`` and ensure its directory is in your local ``$PATH``.
Mac OS X
--------
OS X has Python 2.7 installed by default, but it does not have the pip package manager.
You can install Homebrew's Python 3, which includes pip, and then install the
latest Sphinx using pip::
brew install python3
pip3 install sphinx
Alternatively, you can simply install Sphinx 1.3.x directly from Homebrew::
brew install sphinx-doc
This will install Sphinx for OS X's system Python 2.7, without needing pip.
Either method works; if you plan to use Python for other purposes, it might best
to install Homebrew's Python 3 so that you have the latest Python as well as pip.
If not, just installing sphinx-doc for OS X's system Python 2.7 is fine.
Windows
-------
Use the Chocolatey package manager to install Python and pip,
then use pip to install Sphinx.
Run the following commands from an elevated (Admin) ``cmd.exe``, after installing
Chocolatey as outlined in the `Windows section <compile-windows>`::
choco install python pip -y
Then close that Admin ``cmd.exe``, re-open another Admin ``cmd.exe``, and run::
pip install sphinx
.. _build-changelog:
Building the changelogs
-----------------------
If you have Python installed, but do not want to build all of the documentation,
you can build the changelogs with the ``docs/gen_changelog.py`` script.
All changes should be listed in ``changelog.txt``. A description of this file's
format follows:
.. include:: /docs/changelog.txt
:start-after: ===help
:end-before: ===end
Misc. Notes Misc. Notes
=========== ===========
@ -767,7 +706,7 @@ files alphabetically, so all the files you need should be next to each other.
It is recommended that you create a build folder and run CMake to verify that It is recommended that you create a build folder and run CMake to verify that
you have downloaded everything at this point, assuming your download machine has you have downloaded everything at this point, assuming your download machine has
CMake installed. This involves running a "generate" batch script on Windows, or CMake installed. This involves running a "generate" batch script on Windows, or
a command starting with ``cmake .. -G Ninja`` on Linux and OS X, following the a command starting with ``cmake .. -G Ninja`` on Linux and macOS, following the
instructions in the sections above. CMake should automatically locate files that instructions in the sections above. CMake should automatically locate files that
you placed in ``CMake/downloads``, and use them instead of attempting to you placed in ``CMake/downloads``, and use them instead of attempting to
download them. download them.

@ -0,0 +1,86 @@
.. _contributing:
###########################
How to contribute to DFHack
###########################
.. contents:: Contents
:local:
.. _contributing-code:
Contributing Code
=================
Several things should be kept in mind when contributing code to DFHack.
Code format
-----------
* Four space indents for C++. Never use tabs for indentation in any language.
* LF (Unix style) line terminators
* Avoid trailing whitespace
* UTF-8 encoding
* For C++:
* Opening and closing braces on their own lines or opening brace at the end of the previous line
* Braces placed at original indent level if on their own lines
* #includes should be sorted. C++ libraries first, then dfhack modules, then df structures,
then local includes. Within each category they should be sorted alphabetically.
Pull request guidelines
-----------------------
* Pull requests should be based on (and submitted to) the default branch of the
relevant repo, which is the branch you see when you access the repo on GitHub
or clone the repo without specifying a branch. As of 0.47.04-r1, this is
``develop`` for the main DFHack repo and ``master`` for other repos.
* Use a new branch for each feature or bugfix so that your changes can be merged
independently (i.e. not the ``master`` or ``develop`` branch of your fork).
* An exception: for a collection of small miscellaneous changes (e.g.
structures research), one branch instead of many small branches is fine. It
is still preferred that this branch be dedicated to this purpose, i.e. not
``master`` or ``develop``. Your pull request may be merged at any point
unless you indicate that it isn't ready (see below), but you can continue to
push to the same branch and open new pull requests as needed.
* Try to keep pull requests relatively small so that they are easier to review
and merge.
* If you expect to make a large number of related additions or changes (e.g.
adding a large new plugin), multiple PRs are preferred, as they allow more
frequent (and easier) feedback. If development of this feature is expected
to take a while, we may create a dedicated branch to merge your pull
requests into instead of the repo's default branch.
* If you plan to make additional changes to your pull request in the near
future, or if it isn't quite ready to be merged, mark it as a
`draft pull request <https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests>`_
or add "WIP" to the title. Otherwise, your pull request may be reviewed and/or
merged prematurely.
General contribution guidelines
-------------------------------
* If convenient, compile on multiple platforms when changing anything that
compiles. Our CI should catch anything that fails to build, but checking in
advance can be faster.
* Update documentation when applicable - see `docs-standards` for details.
* Update ``changelog.txt`` and ``docs/Authors.rst`` when applicable. See
`build-changelog` for more information on the changelog format.
* Submit ideas and bug reports as :issue:`issues on GitHub <>`.
Posts in the forum thread can easily get missed or forgotten.
* Work on :issue:`reported problems <?q=is:open+-label:idea>`
will take priority over ideas or suggestions.
Other ways to help
==================
DFHack is a software project, but there's a lot more to it than programming.
If you're not comfortable programming, you can help by:
* reporting bugs and incomplete documentation
* improving the documentation
* finding third-party scripts to add
* writing tutorials for newbies
All those things are crucial, and often under-represented. So if that's
your thing, go get started!

@ -4,8 +4,9 @@
DFHack Core DFHack Core
########### ###########
.. contents:: .. contents:: Contents
:depth: 2 :local:
:depth: 2
Command Implementation Command Implementation
@ -14,12 +15,12 @@ DFHack commands can be implemented in three ways, all of which
are used in the same way: are used in the same way:
:builtin: commands are implemented by the core of DFHack. They manage :builtin: commands are implemented by the core of DFHack. They manage
other DFhack tools, interpret commands, and control basic other DFHack tools, interpret commands, and control basic
aspects of DF (force pause or quit). aspects of DF (force pause or quit).
:plugins: are stored in ``hack/plugins/`` and must be compiled with the :plugins: are stored in ``hack/plugins/`` and must be compiled with the
same version of DFHack. They are less flexible than scripts, same version of DFHack. They are less flexible than scripts,
but used for complex or ongoing tasks becasue they run faster. but used for complex or ongoing tasks because they run faster.
:scripts: are Ruby or Lua scripts stored in ``hack/scripts/``. :scripts: are Ruby or Lua scripts stored in ``hack/scripts/``.
Because they don't need to be compiled, scripts are Because they don't need to be compiled, scripts are
@ -62,7 +63,9 @@ or at any other time using the ``dfhack-run`` executable.
If DF/DFHack is started with arguments beginning with ``+``, the remaining If DF/DFHack is started with arguments beginning with ``+``, the remaining
text is treated as a command in the DFHack console. It is possible to use text is treated as a command in the DFHack console. It is possible to use
multiple such commands, which are split on ``+``. For example:: multiple such commands, which are split on ``+``. For example:
.. code-block:: shell
./dfhack +load-save region1 ./dfhack +load-save region1
"Dwarf Fortress.exe" +devel/print-args Hello! +enable workflow "Dwarf Fortress.exe" +devel/print-args Hello! +enable workflow
@ -81,18 +84,20 @@ dfhack-run
If DF and DFHack are already running, calling ``dfhack-run my command`` If DF and DFHack are already running, calling ``dfhack-run my command``
in an external terminal is equivalent to calling ``my command`` in the in an external terminal is equivalent to calling ``my command`` in the
DFHack console. Direct use of the DFhack console is generally easier, DFHack console. Direct use of the DFHack console is generally easier,
but ``dfhack-run`` can be useful in a variety of circumstances: but ``dfhack-run`` can be useful in a variety of circumstances:
- if the console is unavailable - if the console is unavailable
- with the init setting ``PRINT_MODE:TEXT`` - with the init setting ``PRINT_MODE:TEXT``
- while running an interactive command (eg. `liquids` or `tiletypes`) - while running an interactive command (e.g. `liquids` or `tiletypes`)
- from external programs or scripts - from external programs or scripts
- if DF or DFHack are not responding - if DF or DFHack are not responding
Examples:: Examples:
.. code-block:: shell
./dfhack-run cursecheck ./dfhack-run cursecheck
dfhack-run kill-lua dfhack-run kill-lua
@ -100,11 +105,19 @@ Examples::
The first (\*nix) example `checks for vampires <cursecheck>`; the The first (\*nix) example `checks for vampires <cursecheck>`; the
second (Windows) example uses `kill-lua` to stop a Lua script. second (Windows) example uses `kill-lua` to stop a Lua script.
.. note::
``dfhack-run`` attempts to connect to a server on TCP port 5000. If DFHack
was unable to start this server, ``dfhack-run`` will not be able to connect.
This could happen if you have other software listening on port 5000, or if
you have multiple copies of DF running simultaneously. To assign a different
port, see `remote-server-config`.
Built-in Commands Built-in Commands
================= =================
The following commands are provided by the 'core' components The following commands are provided by the 'core' components
of DFhack, rather than plugins or scripts. of DFHack, rather than plugins or scripts.
.. contents:: .. contents::
:local: :local:
@ -165,10 +178,13 @@ right place to do it.
Most such plugins or scripts support the built-in ``enable`` and ``disable`` Most such plugins or scripts support the built-in ``enable`` and ``disable``
commands. Calling them at any time without arguments prints a list commands. Calling them at any time without arguments prints a list
of enabled and disabled plugins, and shows whether that can be changed of enabled and disabled plugins, and shows whether that can be changed
through the same commands. through the same commands. Passing plugin names to these commands will enable
or disable the specified plugins. For example, to enable the `manipulator`
plugin::
enable manipulator
To enable or disable plugins that support this, use their names as It is also possible to enable or disable multiple plugins at once::
arguments for the command::
enable manipulator search enable manipulator search
@ -271,6 +287,9 @@ something. Usage::
Allows dealing with plugins individually by name, or all at once. Allows dealing with plugins individually by name, or all at once.
Note that plugins do not maintain their enabled state if they are reloaded, so
you may need to use `enable` to re-enable a plugin after reloading it.
.. _ls: .. _ls:
@ -404,11 +423,11 @@ onLoad*.init
When a world is loaded, DFHack looks for files of the form ``onLoad*.init``, When a world is loaded, DFHack looks for files of the form ``onLoad*.init``,
where ``*`` can be any string, including the empty string. where ``*`` can be any string, including the empty string.
All matching init files will be executed in alphebetical order. All matching init files will be executed in alphabetical order.
A world being loaded can mean a fortress, an adventurer, or legends mode. A world being loaded can mean a fortress, an adventurer, or legends mode.
These files are best used for non-persistent commands, such as setting These files are best used for non-persistent commands, such as setting
a `fix <fix>` script to run on `repeat`. a `fix <scripts-fix>` script to run on `repeat`.
.. _onUnload.init: .. _onUnload.init:
@ -429,23 +448,74 @@ Other init files
* ``onMapLoad*.init`` and ``onMapUnload*.init`` are run when a map, * ``onMapLoad*.init`` and ``onMapUnload*.init`` are run when a map,
distinct from a world, is loaded. This is good for map-affecting distinct from a world, is loaded. This is good for map-affecting
commands (eg `clean`), or avoiding issues in Legends mode. commands (e.g. `clean`), or avoiding issues in Legends mode.
* Any lua script named ``raw/init.d/*.lua``, in the save or main DF * Any lua script named ``raw/init.d/*.lua``, in the save or main DF
directory, will be run when any world or that save is loaded. directory, will be run when any world or that save is loaded.
Environment variables .. _dfhack-config:
Configuration Files
===================
Some DFHack settings can be changed by modifying files in the ``dfhack-config``
folder (which is in the DF folder). The default versions of these files, if they
exist, are in ``dfhack-config/default`` and are installed when DFHack starts if
necessary.
.. _script-paths:
Script paths
------------
Script paths are folders that DFHack searches to find a script when a command is
run. By default, the following folders are searched, in order (relative to the
root DF folder):
1. :file:`data/save/{<region folder>}/raw/scripts` (only if a save is loaded)
2. :file:`raw/scripts`
3. :file:`hack/scripts`
For example, if ``teleport`` is run, these folders are searched in order for
``teleport.lua`` or ``teleport.rb``, and the first matching file is run.
Script paths can be added by modifying :file:`dfhack-config/script-paths.txt`.
Each line should start with one of these characters:
- ``+``: adds a script path that is searched *before* the default paths (above)
- ``-``: adds a script path that is searched *after* the default paths
- ``#``: a comment (the line is ignored)
Paths can be absolute or relative - relative paths are interpreted relative to
the root DF folder.
.. admonition:: Tip
When developing scripts in the :source:scripts:`dfhack/scripts repo <>`,
it may be useful to add the path to your local copy of the repo with ``+``.
This will allow you to make changes in the repo and have them take effect
immediately, without needing to re-install or copy scripts over manually.
Script paths can also be modified programmatically through the `Lua API <lua-api-internal>`.
.. _env-vars:
Environment Variables
===================== =====================
DFHack's behavior can be adjusted with some environment variables. For example, DFHack's behavior can be adjusted with some environment variables. For example,
on UNIX-like systems:: on UNIX-like systems:
.. code-block:: shell
DFHACK_SOME_VAR=1 ./dfhack DFHACK_SOME_VAR=1 ./dfhack
- ``DFHACK_PORT``: the port to use for the RPC server (used by ``dfhack-run`` - ``DFHACK_PORT``: the port to use for the RPC server (used by ``dfhack-run``
and `remotefortressreader` among others) instead of the default ``5000``. As and `remotefortressreader` among others) instead of the default ``5000``. As
with the default, if this port cannot be used, the server is not started. with the default, if this port cannot be used, the server is not started.
See `remote` for more details.
- ``DFHACK_DISABLE_CONSOLE``: if set, the DFHack console is not set up. This is - ``DFHACK_DISABLE_CONSOLE``: if set, the DFHack console is not set up. This is
the default behavior if ``PRINT_MODE:TEXT`` is set in ``data/init/init.txt``. the default behavior if ``PRINT_MODE:TEXT`` is set in ``data/init/init.txt``.
@ -487,5 +557,5 @@ This section is for odd but important notes that don't fit anywhere else.
Older versions are available here_. Older versions are available here_.
*These files will eventually be migrated to GitHub.* (see :issue:`473`) *These files will eventually be migrated to GitHub.* (see :issue:`473`)
.. _DFFD: http://dffd.bay12games.com/search.php?string=DFHack&id=15&limit=1000 .. _DFFD: https://dffd.bay12games.com/search.php?string=DFHack&id=15&limit=1000
.. _here: http://dethware.org/dfhack/download .. _here: https://dethware.org/dfhack/download

@ -0,0 +1,82 @@
===========================
DFHack development overview
===========================
DFHack has various components; this page provides an overview of some. If you
are looking to develop a tool for DFHack, developing a script or plugin is
likely the most straightforward choice.
Other pages that may be relevant include:
- `contributing`
- `documentation`
- `license`
.. contents:: Contents
:local:
Plugins
-------
DFHack plugins are written in C++ and located in the ``plugins`` folder.
Currently, documentation on how to write plugins is somewhat sparse. There are
templates that you can get use to get started in the ``plugins/skeleton``
folder, and the source code of existing plugins can also be helpful.
If you want to compile a plugin that you have just added, you will need to add a
call to ``DFHACK_PLUGIN`` in ``plugins/CMakeLists.txt``.
Plugins have the ability to make one or more commands available to users of the
DFHack console. Examples include `3dveins` (which implements the ``3dveins``
command) and `reveal` (which implements ``reveal``, ``unreveal``, and several
other commands).
Plugins can also register handlers to run on every tick, and can interface with
the built-in `enable` and `disable` commands. For the full plugin API, see the
skeleton plugins or ``PluginManager.cpp``.
Installed plugins live in the ``hack/plugins`` folder of a DFHack installation,
and the `load` family of commands can be used to load a recompiled plugin
without restarting DF.
See `plugins-index` for a list of all plugins included in DFHack.
Scripts
-------
DFHack scripts can currently be written in Lua or Ruby. The `Lua API <lua-api>`
is more complete and currently better-documented, however. Referring to existing
scripts as well as the API documentation can be helpful when developing new
scripts.
`Scripts included in DFHack <scripts-index>` live in a separate `scripts repository <https://github.com/dfhack/scripts>`_.
This can be found in the ``scripts`` submodule if you have
`cloned DFHack <compile-how-to-get-the-code>`, or the ``hack/scripts`` folder
of an installed copy of DFHack.
Core
----
The `DFHack core <dfhack-core>` has a variety of low-level functions. It is
responsible for hooking into DF (via SDL), providing a console, and providing an
interface for plugins and scripts to interact with DF.
Modules
-------
A lot of shared code to interact with DF in more complicated ways is contained
in **modules**. For example, the Units module contains functions for checking
various traits of units, changing nicknames properly, and more. Generally, code
that is useful to multiple plugins and scripts should go in the appropriate
module, if there is one.
Several modules are also `exposed to Lua <lua-cpp-func-wrappers>`, although
some functions (and some entire modules) are currently only available in C++.
Remote access interface
-----------------------
DFHack provides a remote access interface that external tools can connect to and
use to interact with DF. See `remote` for more information.

@ -0,0 +1,304 @@
.. _documentation:
###########################
DFHack Documentation System
###########################
DFHack documentation, like the file you are reading now, is created as ``.rst`` files,
which are in `reStructuredText (reST) <https://www.sphinx-doc.org/rest.html>`_ format.
This is a documentation format common in the Python community. It is very
similar in concept - and in syntax - to Markdown, as found on GitHub and many other
places. However it is more advanced than Markdown, with more features available when
compiled to HTML, such as automatic tables of contents, cross-linking, special
external links (forum, wiki, etc) and more. The documentation is compiled by a
Python tool, `Sphinx <https://www.sphinx-doc.org>`_.
The DFHack build process will compile the documentation, but this is disabled
by default due to the additional Python and Sphinx requirements. You typically
only need to build the docs if you're changing them, or perhaps
if you want a local HTML copy; otherwise, you can read an
`online version hosted by ReadTheDocs <https://dfhack.readthedocs.org>`_.
(Note that even if you do want a local copy, it is certainly not necessary to
compile the documentation in order to read it. Like Markdown, reST documents are
designed to be just as readable in a plain-text editor as they are in HTML format.
The main thing you lose in plain text format is hyperlinking.)
.. contents:: Contents
:local:
.. _docs-standards:
Documentation standards
=======================
Whether you're adding new code or just fixing old documentation (and there's plenty),
there are a few important standards for completeness and consistent style. Treat
this section as a guide rather than iron law, match the surrounding text, and you'll
be fine.
Each command should have a short (~54 character) help string, which is shown
by the `ls` command. For scripts, this is a comment on the first line
(the comment marker and whitespace is stripped). For plugins it's the second
argument to ``PluginCommand``. Please make this brief but descriptive!
Everything should be documented! If it's not clear *where* a particular
thing should be documented, ask on IRC or in the DFHack thread on Bay12 -
as well as getting help, you'll be providing valuable feedback that
makes it easier for future readers!
Scripts can use a custom autodoc function, based on the Sphinx ``include``
directive - anything between the tokens is copied into the appropriate scripts
documentation page. For Ruby, we follow the built-in docstring convention
(``=begin`` and ``=end``). For Lua, the tokens are ``[====[`` and ``]====]``
- ordinary multi-line strings. It is highly encouraged to reuse this string
as the in-console documentation by (e.g.) printing it when a ``-help`` argument
is given.
The docs **must** have a heading which exactly matches the command, underlined
with ``=====`` to the same length. For example, a lua file would have:
.. code-block:: lua
local helpstr = [====[
add-thought
===========
Adds a thought or emotion to the selected unit. Can be used by other scripts,
or the gui invoked by running ``add-thought gui`` with a unit selected.
]====]
.. highlight:: rst
Where the heading for a section is also the name of a command, the spelling
and case should exactly match the command to enter in the DFHack command line.
Try to keep lines within 80-100 characters, so it's readable in plain text
in the terminal - Sphinx (our documentation system) will make sure
paragraphs flow.
If there aren't many options or examples to show, they can go in a paragraph of
text. Use double-backticks to put commands in monospaced font, like this::
You can use ``cleanowned scattered x`` to dump tattered or abandoned items.
If the command takes more than three arguments, format the list as a table
called Usage. The table *only* lists arguments, not full commands.
Input values are specified in angle brackets. Example::
Usage:
:arg1: A simple argument.
:arg2 <input>: Does something based on the input value.
:Very long argument:
Is very specific.
To demonstrate usage - useful mainly when the syntax is complicated, list the
full command with arguments in monospaced font, then indent the next line and
describe the effect::
``resume all``
Resumes all suspended constructions.
If it would be helpful to mention another DFHack command, don't just type the
name - add a hyperlink! Specify the link target in backticks, and it will be
replaced with the corresponding title and linked: e.g. ```autolabor```
=> `autolabor`. Link targets should be equivalent to the command
described (without file extension), and placed above the heading of that
section like this::
.. _autolabor:
autolabor
=========
Add link targets if you need them, but otherwise plain headings are preferred.
Scripts have link targets created automatically.
Building the documentation
==========================
.. highlight:: shell
Required dependencies
---------------------
In order to build the documentation, you must have Python with Sphinx
version |sphinx_min_version| or later. Both Python 2.x and 3.x are supported.
When installing Sphinx from OS package managers, be aware that there is
another program called Sphinx, completely unrelated to documentation management.
Be sure you are installing the right Sphinx; it may be called ``python-sphinx``,
for example. To avoid doubt, ``pip`` can be used instead as detailed below.
Once you have installed Sphinx, ``sphinx-build --version`` should report the
version of Sphinx that you have installed. If this works, CMake should also be
able to find Sphinx.
For more detailed platform-specific instructions, see the sections below:
.. contents::
:local:
:backlinks: none
Linux
~~~~~
Most Linux distributions will include Python by default. If not, start by
installing Python (preferably Python 3). On Debian-based distros::
sudo apt install python3
Check your package manager to see if Sphinx |sphinx_min_version| or later is
available. On Debian-based distros, this package is named ``python3-sphinx``.
If this package is new enough, you can install it directly. If not, or if you
want to use a newer Sphinx version (which may result in faster builds), you
can install Sphinx through the ``pip`` package manager instead. On Debian-based
distros, you can install pip with::
sudo apt install python3-pip
Once pip is available, you can then install Sphinx with::
pip3 install sphinx
If you run this as an unprivileged user, it may install a local copy of Sphinx
for your user only. The ``sphinx-build`` executable will typically end up in
``~/.local/bin/`` in this case. Alternatively, you can install Sphinx
system-wide by running pip with ``sudo``. In any case, you will need the folder
containing ``sphinx-build`` to be in your ``$PATH``.
macOS
~~~~~
macOS has Python 2.7 installed by default, but it does not have the pip package manager.
You can install Homebrew's Python 3, which includes pip, and then install the
latest Sphinx using pip::
brew install python3
pip3 install sphinx
Alternatively, you can simply install Sphinx directly from Homebrew::
brew install sphinx-doc
This will install Sphinx for macOS's system Python 2.7, without needing pip.
Either method works; if you plan to use Python for other purposes, it might best
to install Homebrew's Python 3 so that you have the latest Python as well as pip.
If not, just installing sphinx-doc for macOS's system Python 2.7 is fine.
Windows
~~~~~~~
Python for Windows can be downloaded `from python.org <https://www.python.org/downloads/>`_.
The latest version of Python 3 is recommended, as it includes pip already.
You can also install Python and pip through the Chocolatey package manager.
After installing Chocolatey as outlined in the `Windows compilation instructions <compile-windows>`,
run the following command from an elevated (admin) command prompt (e.g. ``cmd.exe``)::
choco install python pip -y
Once you have pip available, you can install Sphinx with the following command::
pip install sphinx
Note that this may require opening a new (admin) command prompt if you just
installed pip from the same command prompt.
Using CMake
-----------
Enabling the ``BUILD_DOCS`` CMake option will cause the documentation to be built
whenever it changes as part of the normal DFHack build process. There are several
ways to do this:
* When initially running CMake, add ``-DBUILD_DOCS:bool=ON`` to your ``cmake``
command. For example::
cmake .. -DCMAKE_BUILD_TYPE:string=Release -DBUILD_DOCS:bool=ON -DCMAKE_INSTALL_PREFIX=<path to DF>
* If you have already run CMake, you can simply run it again from your build
folder to update your configuration::
cmake .. -DBUILD_DOCS:bool=ON
* You can edit the ``BUILD_DOCS`` setting in CMakeCache.txt directly
* You can use the CMake GUI to change ``BUILD_DOCS``
* On Windows, if you prefer to use the batch scripts, you can run
``generate-msvc-gui.bat`` and set ``BUILD_DOCS`` through the GUI. If you are
running another file, such as ``generate-msvc-all.bat``, you will need to edit
it to add the flag. You can also run ``cmake`` on the command line, similar to
other platforms.
Running Sphinx manually
-----------------------
You can also build the documentation without going through CMake, which may be
faster. There is a ``docs/build.sh`` script provided for Linux and macOS that
will run essentially the same command that CMake runs - see the script for
additional options.
To build the documentation with default options, run the following command from
the root DFHack folder::
sphinx-build . docs/html
Sphinx has many options to enable clean builds, parallel builds, logging, and
more - run ``sphinx-build --help`` for details.
Building a PDF version
----------------------
ReadTheDocs automatically builds a PDF version of the documentation (available
under the "Downloads" section when clicking on the release selector). If you
want to build a PDF version locally, you will need ``pdflatex``, which is part
of a TeX distribution. The following command will then build a PDF, located in
``docs/pdf/latex/DFHack.pdf``, with default options::
sphinx-build -M latexpdf . ./docs/pdf
There is a ``docs/build-pdf.sh`` script provided for Linux and macOS that runs
this command for convenience - see the script for additional options.
.. _build-changelog:
Building the changelogs
=======================
If you have Python installed, but do not want to build all of the documentation,
you can build the changelogs with the ``docs/gen_changelog.py`` script. This
script provides additional options, including one to build individual changelogs
for all DFHack versions - run ``python docs/gen_changelog.py --help`` for details.
Changelog entries are obtained from ``changelog.txt`` files in multiple repos.
This allows changes to be listed in the same repo where they were made. These
changelogs are combined as part of the changelog build process:
* ``docs/changelog.txt`` for changes in the main ``dfhack`` repo
* ``scripts/changelog.txt`` for changes made to scripts in the ``scripts`` repo
* ``library/xml/changelog.txt`` for changes made in the ``df-structures`` repo
Building the changelogs generates two files: ``docs/_auto/news.rst`` and
``docs/_auto/news-dev.rst``. These correspond to `changelog` and `dev-changelog`
and contain changes organized by stable and development DFHack releases,
respectively. For example, an entry listed under "0.44.05-alpha1" in
changelog.txt will be listed under that version in the development changelog as
well, but under "0.44.05-r1" in the stable changelog (assuming that is the
closest stable release after 0.44.05-alpha1). An entry listed under a stable
release like "0.44.05-r1" in changelog.txt will be listed under that release in
both the stable changelog and the development changelog.
Changelog syntax
----------------
.. include:: /docs/changelog.txt
:start-after: ===help
:end-before: ===end

@ -1,16 +1,19 @@
:orphan: :orphan:
.. _HISTORY: .. _History:
######################## #####################
HISTORY - old changelogs Historical changelogs
######################## #####################
This file is where old changelogs live, so the current `changelog` This file is where old changelogs live, so the `current changelog <changelog>`
in ``NEWS.rst`` doesn't get too long. doesn't get too long. Some of these changelogs are also formatted differently
from current changelogs and would be difficult for the current `changelog
generation system <build-changelog>` to handle.
.. contents:: .. contents:: Contents
:depth: 2 :local:
:depth: 1
DFHack 0.43.05-r3 DFHack 0.43.05-r3
================= =================
@ -224,7 +227,7 @@ Internals
Lua Lua
--- ---
- Lua has been updated to 5.3 - see http://www.lua.org/manual/5.3/readme.html for details - Lua has been updated to 5.3 - see https://www.lua.org/manual/5.3/readme.html for details
- Floats are no longer implicitly converted to integers in DFHack API calls - Floats are no longer implicitly converted to integers in DFHack API calls

@ -0,0 +1,168 @@
.. _installing:
=================
Installing DFHack
=================
.. contents::
:local:
Requirements
============
DFHack supports Windows, Linux, and macOS, and both 64-bit and 32-bit builds
of Dwarf Fortress.
.. _installing-df-version:
DFHack releases generally only support the version of Dwarf Fortress that they
are named after. For example, DFHack 0.40.24-r5 only supported DF 0.40.24.
DFHack releases *never* support newer versions of DF, because DFHack requires
data about DF that is only possible to obtain after DF has been released.
Occasionally, DFHack releases will be able to maintain support for older
versions of DF - for example, DFHack 0.34.11-r5 supported both DF 0.34.11 and
0.34.10. For maximum stability, you should usually use the latest versions of
both DF and DFHack.
Windows
-------
* DFHack only supports the SDL version of Dwarf Fortress. The "legacy" version
will *not* work with DFHack (the "small" SDL version is acceptable, however).
* Windows XP and older are *not* supported, due in part to a
`Visual C++ 2015 bug <https://stackoverflow.com/questions/32452777/visual-c-2015-express-stat-not-working-on-windows-xp>`_
The Windows build of DFHack should work under Wine on other operating systems,
although this is not tested very often. It is recommended to use the native
build for your operating system instead.
.. _installing-reqs-linux:
Linux
-----
Generally, DFHack should work on any modern Linux distribution. There are
multiple release binaries provided - as of DFHack 0.47.04-r1, there are built
with GCC 7 and GCC 4.8 (as indicated by the ``gcc`` component of their
filenames). Using the newest build that works on your system is recommended.
The GCC 4.8 build is built on Ubuntu 14.04 and targets an older glibc, so it
should work on older distributions.
In the event that none of the provided binaries work on your distribution,
you may need to `compile DFHack from source <compile>`.
macOS
-----
OS X 10.6.8 or later is required.
.. _downloading:
Downloading DFHack
==================
Stable builds of DFHack are available on `GitHub <https://github.com/dfhack/dfhack/releases>`_.
GitHub has been known to change their layout periodically, but as of July 2020,
downloads are available at the bottom of the release notes for each release, under a section
named "Assets" (which you may have to expand). The name of the file indicates
which DF version, platform, and architecture the build supports - the platform
and architecture (64-bit or 32-bit) **must** match your build of DF. The DF
version should also match your DF version - see `above <installing-df-version>`
for details. For example:
* ``dfhack-0.47.04-r1-Windows-64bit.zip`` supports 64-bit DF on Windows
* ``dfhack-0.47.04-r1-Linux-32bit-gcc-7.tar.bz2`` supports 32-bit DF on Linux
(see `installing-reqs-linux` for details on the GCC version indicator)
The `DFHack website <https://dfhack.org/builds>`_ also provides links to
unstable builds. These files have a different naming scheme, but the same
restrictions apply (e.g. a file named ``Windows64`` is for 64-bit Windows DF).
.. warning::
Do *not* download the source code from GitHub, either from the releases page
or by clicking "Download ZIP" on the repo homepage. This will give you an
incomplete copy of the DFHack source code, which will not work as-is. (If
you want to compile DFHack instead of using a pre-built release, see
`compile` for instructions.)
Installing DFHack
=================
When you `download DFHack <downloading>`, you will end up with a release archive
(a ``.zip`` file on Windows, or a ``.tar.bz2`` file on other platforms). Your
operating system should have built-in utilities capable of extracting files from
these archives.
The release archives contain several files and folders, including a ``hack``
folder, a ``dfhack-config`` folder, and a ``dfhack.init-example`` file. To
install DFHack, copy all of the files from the DFHack archive into the root DF
folder, which should already include a ``data`` folder and a ``raw`` folder,
among other things. Some packs and other redistributions of Dwarf Fortress may
place DF in another folder, so ensure that the ``hack`` folder ends up next to
the ``data`` folder.
.. note::
On Windows, installing DFHack will overwrite ``SDL.dll``. This is
intentional and necessary for DFHack to work, so be sure to choose to
overwrite ``SDL.dll`` if prompted. (If you are not prompted, you may be
installing DFHack in the wrong place.)
Uninstalling DFHack
===================
Uninstalling DFHack essentially involves reversing what you did to install
DFHack. On Windows, replace ``SDL.dll`` with ``SDLreal.dll`` first. Then, you
can remove any files that were part of the DFHack archive. DFHack does not
currently maintain a list of these files, so if you want to completely remove
them, you should consult the DFHack archive that you installed for a full list.
Generally, any files left behind should not negatively affect DF.
Upgrading DFHack
================
The recommended approach to upgrade DFHack is to uninstall DFHack first, then
install the new version. This will ensure that any files that are only part
of the older DFHack installation do not affect the new DFHack installation
(although this is unlikely to occur).
It is also possible to overwrite an existing DFHack installation in-place.
To do this, follow the installation instructions above, but overwrite all files
that exist in the new DFHack archive (on Windows, this includes ``SDL.dll`` again).
.. note::
You may wish to make a backup of your ``dfhack-config`` folder first if you
have made changes to it. Some archive managers (e.g. Archive Utility on macOS)
will overwrite the entire folder, removing any files that you have added.
Pre-packaged DFHack installations
=================================
There are :wiki:`several packs available <Utility:Lazy_Newb_Pack>` that include
DF, DFHack, and other utilities. If you are new to Dwarf Fortress and DFHack,
these may be easier to set up. Note that these packs are not maintained by the
DFHack team and vary in their release schedules and contents. Some may make
significant configuration changes, and some may not include DFHack at all.
Linux packages
==============
Third-party DFHack packages are available for some Linux distributions,
including in:
* `AUR <https://aur.archlinux.org/packages/dfhack/>`__, for Arch and related
distributions
* `RPM Fusion <https://admin.rpmfusion.org/pkgdb/package/nonfree/dfhack/>`__,
for Fedora and related distributions
Note that these may lag behind DFHack releases. If you want to use a newer
version of DFHack, we generally recommended installing it in a clean copy of DF
in your home folder. Attempting to upgrade an installation of DFHack from a
package manager may break it.

@ -7,73 +7,47 @@ Introduction and Overview
DFHack is a Dwarf Fortress memory access library, distributed with DFHack is a Dwarf Fortress memory access library, distributed with
a wide variety of useful scripts and plugins. a wide variety of useful scripts and plugins.
The project is currently hosted at https://www.github.com/DFHack/dfhack, The project is currently hosted `on GitHub <https://www.github.com/DFHack/dfhack>`_,
and can be downloaded from `the releases page and can be downloaded from `the releases page <https://github.com/DFHack/dfhack/releases>`_
<http://github.com/DFHack/dfhack/releases>`_. - see `installing` for installation instructions. This is also where the
`DFHack bug tracker <https://www.github.com/DFHack/dfhack>`_ is hosted.
All new releases are announced in :forums:`the bay12 forums thread <139553>`, All new releases are announced in `the Bay12 forums thread <https://dfhack.org/bay12>`_,
which is also a good place for discussion and questions. which is also a good place for discussion and questions.
For users, it provides a significant suite of bugfixes and interface For users, DFHack provides a significant suite of bugfixes and interface
enhancements by default, and more can be enabled. There are also many tools enhancements by default, and more can be enabled. There are also many tools
(such as `workflow` or `autodump`) which can make life easier. (such as `workflow` or `autodump`) which can make life easier.
You can even add third-party scripts and plugins to do almost anything! You can even add third-party scripts and plugins to do almost anything!
For modders, DFHack makes many things possible. Custom reactions, new For modders, DFHack makes many things possible. Custom reactions, new
interactions, magic creature abilities, and more can be set through `modtools` interactions, magic creature abilities, and more can be set through `scripts-modtools`
and custom raws. Non-standard DFHack scripts and inits can be stored in the and custom raws. Non-standard DFHack scripts and inits can be stored in the
raw directory, making raws or saves fully self-contained for distribution - raw directory, making raws or saves fully self-contained for distribution -
or for coexistence in a single DF install, even with incompatible components. or for coexistence in a single DF install, even with incompatible components.
For developers, DFHack unites the various ways tools access DF memory and For developers, DFHack unites the various ways tools access DF memory and
allows easier development of new tools. As an open-source project under allows easier development of new tools. As an open-source project under
`various copyleft licences <license>`, contributions are welcome. `various open-source licences <license>`, contributions are welcome.
.. contents:: .. contents:: Contents
:local:
.. _installing:
Installing DFHack
=================
DFHack is available for the SDL version of Dwarf Fortress on Windows,
any modern Linux distribution, and Mac OS X (10.6.8 and later).
It is possible to use Windows DF+DFHack under Wine on Linux or OS X.
Most releases only support the version of DF mentioned in their title - for
example, DFHack 0.40.24-r2 only supports DF 0.40.24 - but some releases
support earlier DF versions as well. Wherever possible, use the latest version
of DFHack built for the target version of DF.
Installing DFhack involves copying files from a release archive
into your DF folder, so that:
* On Windows, ``SDL.dll`` is replaced
* On Linux or OS X, the ``dfhack`` script is placed in the same folder as the ``df`` script
Uninstalling is basically the same, in reverse:
* On Windows, replace ``SDL.dll`` with ``SDLreal.dll``, then remove the DFHack files.
* On Linux or OS X, remove the DFHack files.
New players may wish to :wiki:`get a pack <Utility:Lazy_Newb_Pack>`
with DFHack preinstalled.
Getting started Getting started
=============== ===============
DFHack basically extends DF with something similar to the See `installing` for details on installing DFHack.
console found in many PC games.
If DFHack is installed correctly, it will automatically pop up a console Once DFHack is installed, it extends DF with a console that can be used to run
window once DF is started as usual on Windows. Linux and Mac OS X require commands. On Windows, this console will open automatically when DF is started.
running the dfhack script from the terminal, and will use that terminal for On Linux and macOS, you will need to run the ``dfhack`` script from a terminal
the console. (instead of the ``df`` script included with DF), and that terminal will be
used by the DFHack console.
* Basic interaction with dfhack involves entering commands into the console. * Basic interaction with DFHack involves entering commands into the console. To
To learn what commands are available, you can keep reading this documentation learn what commands are available, you can keep reading this documentation or
or skip ahead and use the `ls` and `help` commands. skip ahead and use the `ls` and `help` commands.
* Another way to interact with DFHack is to set in-game `keybindings <keybinding>` * Another way to interact with DFHack is to set in-game `keybindings <keybinding>`
for certain commands. Many of the newer and user-friendly tools are designed for certain commands. Many of the newer and user-friendly tools are designed
@ -87,6 +61,7 @@ the console.
.. _troubleshooting: .. _troubleshooting:
.. _support:
Troubleshooting Troubleshooting
=============== ===============
@ -101,7 +76,7 @@ If the search function in this documentation isn't enough and
:wiki:`the DF Wiki <>` hasn't helped, try asking in: :wiki:`the DF Wiki <>` hasn't helped, try asking in:
- the `#dfhack IRC channel on freenode <https://webchat.freenode.net/?channels=dfhack>`_ - the `#dfhack IRC channel on freenode <https://webchat.freenode.net/?channels=dfhack>`_
- the :forums:`Bay12 DFHack thread <139553>` - the `Bay12 DFHack thread <https://dfhack.org/bay12>`_
- the `/r/dwarffortress <https://dwarffortress.reddit.com>`_ questions thread - the `/r/dwarffortress <https://dwarffortress.reddit.com>`_ questions thread
- the thread for the mod or Starter Pack you're using (if any) - the thread for the mod or Starter Pack you're using (if any)

File diff suppressed because it is too large Load Diff

@ -0,0 +1,162 @@
.. _memory-research:
###############
Memory research
###############
There are a variety of tools that can be used to analyze DF memory - some are
listed here. Note that some of these may be old and unmaintained. If you aren't
sure what tool would be best for your purposes, feel free to ask for advice (on
IRC, Bay12, etc.).
.. contents:: Contents
:local:
Cross-platform tools
====================
Ghidra
------
Ghidra is a cross-platform reverse-engineering framework (written in Java)
available at https://ghidra-sre.org. It supports analyzing both 32-bit and
64-bit executables for all supported DF platforms. There are some custom DFHack
Ghidra scripts available in the `df_misc`_ repo (look for ``.java`` files).
IDA Freeware 7.0
----------------
Available from `Hex-Rays <https://www.hex-rays.com/products/ida/support/download_freeware/>`_.
Supports analyzing both 32-bit and 64-bit executables for all supported DF platforms.
Some ``.idc`` scripts for IDA are available in the `df_misc`_ repo.
.. _df_misc: https://github.com/DFHack/df_misc
Hopper
------
Runs on macOS and some Linux distributions; available from https://www.hopperapp.com/.
`TWBT <https://github.com/mifki/df-twbt/blob/master/PATCHES.md>`_ uses this to produce some patches.
DFHack tools
------------
Plugins
~~~~~~~
There are a few development plugins useful for low-level memory research. They
are not built by default, but can be built by setting the ``BUILD_DEVEL``
`CMake option <compile-build-options>`. These include:
- ``check-structures-sanity``, which performs sanity checks on the given DF
object. Note that this will crash in several cases, some intentional, so using
this with `GDB <linux-gdb>` is recommended.
- ``memview``, which produces a hex dump of a given memory range. It also
highlights valid pointers, and can be configured to work with `sizecheck`
to auto-detect object sizes.
- ``vectors``, which can identify instances of ``std::vector`` in a given memory range.
Scripts
~~~~~~~
Several `development scripts <scripts-devel>` can be useful for memory research.
These include (but are not limited to):
- `devel/dump-offsets`
- `devel/find-offsets`
- `devel/lsmem`
- `devel/sc` (requires `sizecheck`)
- `devel/visualize-structure`
- Generally, any script starting with ``devel/find``
.. _sizecheck:
Sizecheck
~~~~~~~~~
Sizecheck is a custom tool that hooks into the memory allocator and inserts a
header indicating the size of every object. The corresponding logic to check for
this header when freeing memory usually works, but is inherently not foolproof.
You should not count on DF being stable when using this.
DFHack's implementation of sizecheck is currently only tested on Linux, although
it probably also works on macOS. It can be built with the ``BUILD_SIZECHECK``
`CMake option <compile-build-options>`, which produces a ``libsizecheck``
library installed in the ``hack`` folder. On Linux, passing ``--sc`` as the
first argument to the ``dfhack`` launcher script will load this library on
startup. On other platforms, or when passing a different argument to the
launcher (such as for `linux-gdb`), you will need to preload this library
manually, by setting ``PRELOAD_LIB`` on Linux (or ``LD_PRELOAD`` if editing the
``dfhack`` launcher script directly), or by editing the ``dfhack`` launcher
script and adding the library to ``DYLD_INSERT_LIBRARIES`` on macOS.
There is also an older sizecheck implementation by Mifki available on
`GitHub <https://github.com/mifki/df-sizecheck>`__ (``b.cpp`` is the main
sizecheck library, and ``win_patch.cpp`` is used for Windows support). To use
this with other DFHack tools, you will likely need to edit the header's
magic number to match what is used in `devel/sc` (search for a hexadecimal
constant starting with ``0x``).
Legacy tools
~~~~~~~~~~~~
Some very old DFHack tools are available in the `legacy branch on GitHub <https://github.com/dfhack/dfhack/tree/legacy/tools>`_.
No attempt is made to support these.
Linux-specific tools
====================
.. _linux-gdb:
GDB
---
`GDB <https://www.gnu.org/software/gdb/>`_ is technically cross-platform, but
tends to work best on Linux, and DFHack currently only offers support for using
GDB on 64-bit Linux. To start with GDB, pass ``-g`` to the DFHack launcher
script:
.. code-block:: shell
./dfhack -g
Some basic GDB commands:
- ``run``: starts DF from the GDB prompt. Any arguments will be passed as
command-line arguments to DF (e.g. `load-save` may be useful).
- ``bt`` will produce a backtrace if DF crashes.
See the `official GDB documentation <https://www.gnu.org/software/gdb/documentation/>`_
for more details.
Other analysis tools
--------------------
The ``dfhack`` launcher script on Linux has support for launching several other
tools alongside DFHack, including Valgrind (as well as Callgrind and Helgrind)
and strace. See the script for the exact command-line option to specify. Note
that currently only one tool at a time is supported, and must be specified
with the first argument to the script.
df-structures GUI
-----------------
This is a tool written by Angavrilov and available on `GitHub <https://github.com/angavrilov/cl-linux-debug>`__.
It only supports 32-bit DF. Some assistance may be available on IRC.
EDB (Evan's debugger)
---------------------
Available on `GitHub <https://github.com/eteran/edb-debugger>`__.
Windows-specific tools
======================
Some people have used `Cheat Engine <https://www.cheatengine.org/>`__ for research in the past.

@ -13,7 +13,8 @@ which they first appeared. See `build-changelog` for more information.
See `changelog` for a list of changes grouped by stable releases. See `changelog` for a list of changes grouped by stable releases.
.. contents:: .. contents:: Contents
:depth: 2 :local:
:depth: 1
.. include:: /docs/_auto/news-dev.rst .. include:: /docs/_auto/news-dev.rst

@ -13,14 +13,15 @@ appeared. See `build-changelog` for more information.
See `dev-changelog` for a list of changes grouped by development releases. See `dev-changelog` for a list of changes grouped by development releases.
.. contents:: .. contents:: Contents
:depth: 2 :local:
:depth: 1
.. include:: /docs/_auto/news.rst .. include:: /docs/_auto/news.rst
Older Changelogs Older Changelogs
================ ================
Are kept in a seperate file: `HISTORY` Are kept in a seperate file: `History`
.. that's ``docs/history.rst``, if you're reading the raw text. .. that's ``docs/History.rst``, if you're reading the raw text.

@ -1,3 +1,5 @@
.. _plugins-index:
############## ##############
DFHack Plugins DFHack Plugins
############## ##############
@ -9,8 +11,9 @@ game subsystems or the entire renderer.
Most commands offered by plugins are listed here, Most commands offered by plugins are listed here,
hopefully organised in a way you will find useful. hopefully organised in a way you will find useful.
.. contents:: .. contents:: Contents
:depth: 3 :local:
:depth: 2
=============================== ===============================
Data inspection and visualizers Data inspection and visualizers
@ -34,7 +37,9 @@ For more information, see `the full Stonesense README <stonesense>`.
blueprint blueprint
========= =========
Exports a portion of your fortress into QuickFort style blueprint files.:: Exports a portion of your fortress into QuickFort style blueprint files.
Usage::
blueprint <x> <y> <z> <name> [dig] [build] [place] [query] blueprint <x> <y> <z> <name> [dig] [build] [place] [query]
@ -56,6 +61,11 @@ remotefortressreader
An in-development plugin for realtime fortress visualisation. An in-development plugin for realtime fortress visualisation.
See :forums:`Armok Vision <146473>`. See :forums:`Armok Vision <146473>`.
.. _isoworldremote:
isoworldremote
==============
A plugin that implements a `remote API <remote>` used by Isoworld.
.. _cursecheck: .. _cursecheck:
@ -109,24 +119,21 @@ A tool for checking how many tiles contain flowing liquids. If you suspect that
your magma sea leaks into HFS, you can use this tool to be sure without your magma sea leaks into HFS, you can use this tool to be sure without
revealing the map. revealing the map.
.. _pathable:
pathable
========
This plugin implements the back end of the `gui/pathable` script. It exports a
single Lua function, in ``hack/lua/plugins/pathable.lua``:
* ``paintScreen(cursor[,skip_unrevealed])``: Paint each visible of the screen
green or red, depending on whether it can be pathed to from the tile at
``cursor``. If ``skip_unrevealed`` is specified and true, do not draw
unrevealed tiles.
.. _probe: .. _probe:
probe probe
===== =====
Can be used to determine tile properties like temperature.
This plugin provides multiple commands that print low-level properties of the
selected objects.
* ``probe``: prints some properties of the tile selected with :kbd:`k`. Some of
these properties can be passed into `tiletypes`.
* ``cprobe``: prints some properties of the unit selected with :kbd:`v`, as well
as the IDs of any worn items. `gui/gm-unit` and `gui/gm-editor` are more
complete in-game alternatives.
* ``bprobe``: prints some properties of the building selected with :kbd:`q` or
:kbd:`t`. `gui/gm-editor` is a more complete in-game alternative.
.. _prospect: .. _prospect:
.. _prospector: .. _prospector:
@ -183,7 +190,7 @@ Usage and related commands:
:revflood: Hide everything, then reveal tiles with a path to the cursor :revflood: Hide everything, then reveal tiles with a path to the cursor
(useful to make walled-off rooms vanish) (useful to make walled-off rooms vanish)
:revforget: Discard info about what was visible before revealing the map. :revforget: Discard info about what was visible before revealing the map.
Only useful where (eg) you abandoned with the fort revealed Only useful where (e.g.) you abandoned with the fort revealed
and no longer want the data. and no longer want the data.
.. _showmood: .. _showmood:
@ -283,6 +290,8 @@ One-shot subcommands:
Subcommands that persist until disabled or DF quits: Subcommands that persist until disabled or DF quits:
.. comment: sort these alphabetically
:adamantine-cloth-wear: Prevents adamantine clothing from wearing out while being worn (:bug:`6481`). :adamantine-cloth-wear: Prevents adamantine clothing from wearing out while being worn (:bug:`6481`).
:advmode-contained: Works around :bug:`6202`, custom reactions with container inputs :advmode-contained: Works around :bug:`6202`, custom reactions with container inputs
in advmode. The issue is that the screen tries to force you to select in advmode. The issue is that the screen tries to force you to select
@ -297,6 +306,7 @@ Subcommands that persist until disabled or DF quits:
:craft-age-wear: Fixes the behavior of crafted items wearing out over time (:bug:`6003`). :craft-age-wear: Fixes the behavior of crafted items wearing out over time (:bug:`6003`).
With this tweak, items made from cloth and leather will gain a level of With this tweak, items made from cloth and leather will gain a level of
wear every 20 years. wear every 20 years.
:do-job-now: Adds a job priority toggle to the jobs list
:embark-profile-name: Allows the use of lowercase letters when saving embark profiles :embark-profile-name: Allows the use of lowercase letters when saving embark profiles
:eggs-fertile: Displays a fertility indicator on nestboxes :eggs-fertile: Displays a fertility indicator on nestboxes
:farm-plot-select: Adds "Select all" and "Deselect all" options to farm plot menus :farm-plot-select: Adds "Select all" and "Deselect all" options to farm plot menus
@ -327,12 +337,15 @@ Subcommands that persist until disabled or DF quits:
i.e. stop the rightmost list of the Positions page of the military i.e. stop the rightmost list of the Positions page of the military
screen from constantly resetting to the top. screen from constantly resetting to the top.
:nestbox-color: Fixes the color of built nestboxes :nestbox-color: Fixes the color of built nestboxes
:reaction-gloves: Fixes reactions to produce gloves in sets with correct handedness (:bug:`6273`)
:shift-8-scroll: Gives Shift-8 (or :kbd:`*`) priority when scrolling menus, instead of scrolling the map :shift-8-scroll: Gives Shift-8 (or :kbd:`*`) priority when scrolling menus, instead of scrolling the map
:stable-cursor: Saves the exact cursor position between t/q/k/d/b/etc menus of fortress mode. :stable-cursor: Saves the exact cursor position between t/q/k/d/b/etc menus of fortress mode.
:stone-status-all: Adds an option to toggle the economic status of all stones :stone-status-all: Adds an option to toggle the economic status of all stones
:title-start-rename: Adds a safe rename option to the title screen "Start Playing" menu :title-start-rename: Adds a safe rename option to the title screen "Start Playing" menu
:tradereq-pet-gender: Displays pet genders on the trade request screen :tradereq-pet-gender: Displays pet genders on the trade request screen
.. comment: sort these alphabetically
.. _fix-armory: .. _fix-armory:
fix-armory fix-armory
@ -692,15 +705,45 @@ enabled materials, you should be able to place complex constructions more conven
buildingplan buildingplan
============ ============
When active (via ``enable buildingplan``), this plugin adds a planning mode for When active (via ``enable buildingplan``), this plugin adds a planning mode for
furniture placement. You can then place furniture and other buildings before building placement. You can then place furniture, constructions, and other buildings
the required materials are available, and the job will be unsuspended when before the required materials are available, and they will be created in a suspended
the item is created. state. Buildingplan will periodically scan for appropriate items, and the jobs will
be unsuspended when the items are available.
Very useful when combined with `workflow` - you can set a constraint This is very useful when combined with `workflow` - you can set a constraint
to always have one or two doors/beds/tables/chairs/etc available, and place to always have one or two doors/beds/tables/chairs/etc available, and place
as many as you like. The plugins then take over and fulfill the orders, as many as you like. The plugins then take over and fulfill the orders,
with minimal space dedicated to stockpiles. with minimal space dedicated to stockpiles.
Item filtering
--------------
While placing a building, you can set filters for what materials you want the building made
out of, what quality you want the component items to be, and whether you want the items to
be decorated.
If a building type takes more than one item to construct, use
:kbd:`Ctrl`:kbd:`Left` and :kbd:`Ctrl`:kbd:`Right` to select the item that you
want to set filters for. Any filters that you set will be used for all buildings
of the selected type from that point onward (until you set a new filter or clear
the current one).
For example, you can be sure that all your constructed walls are the same color by setting
a filter to accept only certain types of stone.
Quickfort mode
--------------
If you use the external Python Quickfort to apply building blueprints instead of the native
DFHack `quickfort` script, you must enable Quickfort mode. This temporarily enables
buildingplan for all building types and adds an extra blank screen after every building
placement. This "dummy" screen is needed for Python Quickfort to interact successfully with
Dwarf Fortress.
Note that Quickfort mode is only for compatibility with the legacy Python Quickfort. The
DFHack `quickfort` script does not need Quickfort mode to be enabled. The `quickfort` script
will successfully integrate with buildingplan as long as the buildingplan plugin is enabled.
.. _confirm: .. _confirm:
confirm confirm
@ -728,7 +771,7 @@ by moving the view manually.
mousequery mousequery
========== ==========
Adds mouse controls to the DF interface, eg click-and-drag designations. Adds mouse controls to the DF interface, e.g. click-and-drag designations.
Options: Options:
@ -770,6 +813,7 @@ Adds a :kbd:`q` menu for track stops, which is completely blank by default.
This allows you to view and/or change the track stop's friction and dump This allows you to view and/or change the track stop's friction and dump
direction settings, using the keybindings from the track stop building interface. direction settings, using the keybindings from the track stop building interface.
.. _sort:
.. _sort-items: .. _sort-items:
sort-items sort-items
@ -831,10 +875,10 @@ See `gui/stockpiles` for an in-game interface.
:savestock: Saves the currently highlighted stockpile's settings to a file in your Dwarf :savestock: Saves the currently highlighted stockpile's settings to a file in your Dwarf
Fortress folder. This file can be used to copy settings between game saves or Fortress folder. This file can be used to copy settings between game saves or
players. eg: ``savestock food_settings.dfstock`` players. e.g.: ``savestock food_settings.dfstock``
:loadstock: Loads a saved stockpile settings file and applies it to the currently selected :loadstock: Loads a saved stockpile settings file and applies it to the currently selected
stockpile. eg: ``loadstock food_settings.dfstock`` stockpile. e.g.: ``loadstock food_settings.dfstock``
To use savestock and loadstock, use the :kbd:`q` command to highlight a stockpile. To use savestock and loadstock, use the :kbd:`q` command to highlight a stockpile.
Then run savestock giving it a descriptive filename. Then, in a different (or Then run savestock giving it a descriptive filename. Then, in a different (or
@ -1429,7 +1473,9 @@ can be displayed on the main fortress mode screen:
The file :file:`dfhack-config/dwarfmonitor.json` can be edited to control the The file :file:`dfhack-config/dwarfmonitor.json` can be edited to control the
positions and settings of all widgets displayed. This file should contain a positions and settings of all widgets displayed. This file should contain a
JSON object with the key ``widgets`` containing an array of objects - see the JSON object with the key ``widgets`` containing an array of objects - see the
included file in the ``dfhack-config`` folder for an example:: included file in the ``dfhack-config`` folder for an example:
.. code-block:: lua
{ {
"widgets": [ "widgets": [
@ -1563,6 +1609,8 @@ Options:
:nick: Mass-assign nicknames, must be followed by the name you want :nick: Mass-assign nicknames, must be followed by the name you want
to set. to set.
:remnick: Mass-remove nicknames. :remnick: Mass-remove nicknames.
:enumnick: Assign enumerated nicknames (e.g. "Hen 1", "Hen 2"...). Must be
followed by the prefix to use in nicknames.
:tocages: Assign unit(s) to cages inside a pasture. :tocages: Assign unit(s) to cages inside a pasture.
:uinfo: Print info about unit(s). If no filters are set a unit must :uinfo: Print info about unit(s). If no filters are set a unit must
be selected in the in-game ui. be selected in the in-game ui.
@ -1925,10 +1973,10 @@ Options:
:L: Low Traffic :L: Low Traffic
:R: Restricted Traffic :R: Restricted Traffic
.. _burrow: .. _burrows:
burrow burrows
====== =======
Miscellaneous burrow control. Allows manipulating burrows and automated burrow Miscellaneous burrow control. Allows manipulating burrows and automated burrow
expansion while digging. expansion while digging.
@ -2298,16 +2346,19 @@ by spaces.
Options: Options:
:``-t``: Select trees only (exclude shrubs) :``-t``: Tree: Select trees only (exclude shrubs)
:``-s``: Select shrubs only (exclude trees) :``-s``: Shrub: Select shrubs only (exclude trees)
:``-c``: Clear designations instead of setting them :``-f``: Farming: Designate only shrubs that yield seeds for farming. Implies -s
:``-x``: Apply selected action to all plants except those specified (invert :``-c``: Clear: Clear designations instead of setting them
:``-x``: eXcept: Apply selected action to all plants except those specified (invert
selection) selection)
:``-a``: Select every type of plant (obeys ``-t``/``-s``) :``-a``: All: Select every type of plant (obeys ``-t``/``-s``/``-f``)
:``-v``: Lists the number of (un)designations per plant :``-v``: Verbose: Lists the number of (un)designations per plant
:``-n *``: Number: Designate up to * (an integer number) plants of each species
Specifying both ``-t`` and ``-s`` will have no effect. If no plant IDs are specified, Specifying both ``-t`` and ``-s`` or ``-f`` will have no effect. If no plant IDs are
all valid plant IDs will be listed. specified, all valid plant IDs will be listed, with ``-t``, ``-s``, and ``-f``
restricting the list to trees, shrubs, and farmable shrubs, respectively.
.. note:: .. note::
@ -2318,6 +2369,12 @@ all valid plant IDs will be listed.
plant gatherer to walk there and do nothing (except clearing the plant gatherer to walk there and do nothing (except clearing the
designation). See :issue:`1479` for details. designation). See :issue:`1479` for details.
The implementation another known deficiency: it's incapable of detecting that
raw definitions that specify a seed extraction reaction for the structural part
but has no other use for it cannot actually yield any seeds, as the part is
never used (parts of :bug:`6940`, e.g. Red Spinach), even though DF
collects it, unless there's a workshop reaction to do it (which there isn't
in vanilla).
.. _infiniteSky: .. _infiniteSky:
@ -2347,11 +2404,15 @@ dfhack command line and can't be used from a hotkey. Settings will be remembered
as long as dfhack runs. Intended for use in combination with the command as long as dfhack runs. Intended for use in combination with the command
``liquids-here`` (which can be bound to a hotkey). See also :issue:`80`. ``liquids-here`` (which can be bound to a hotkey). See also :issue:`80`.
.. note:: .. warning::
Spawning and deleting liquids can mess up pathing data and Spawning and deleting liquids can mess up pathing data and
temperatures (creating heat traps). You've been warned. temperatures (creating heat traps). You've been warned.
.. note::
`gui/liquids` is an in-game UI for this script.
Settings will be remembered until you quit DF. You can call `liquids-here` to execute Settings will be remembered until you quit DF. You can call `liquids-here` to execute
the last configured action, which is useful in combination with keybindings. the last configured action, which is useful in combination with keybindings.
@ -2457,7 +2518,8 @@ See also `alltraffic`, `filltraffic`, and `restrictice`.
tiletypes tiletypes
========= =========
Can be used for painting map tiles and is an interactive command, much like Can be used for painting map tiles and is an interactive command, much like
`liquids`. If something goes wrong, `fixveins` may help. `liquids`. Some properties of existing tiles can be looked up with `probe`. If
something goes wrong, `fixveins` may help.
The tool works with two set of options and a brush. The brush determines which The tool works with two set of options and a brush. The brush determines which
tiles will be processed. First set of options is the filter, which can exclude tiles will be processed. First set of options is the filter, which can exclude
@ -2608,25 +2670,40 @@ Usage:
createitem createitem
========== ==========
Allows creating new items of arbitrary types and made of arbitrary materials. Allows creating new items of arbitrary types and made of arbitrary materials. A
By default, items created are spawned at the feet of the selected unit. unit must be selected in-game to use this command. By default, items created are
spawned at the feet of the selected unit.
Specify the item and material information as you would indicate them in Specify the item and material information as you would indicate them in
custom reaction raws, with the following differences: custom reaction raws, with the following differences:
* Separate the item and material with a space rather than a colon * Separate the item and material with a space rather than a colon
* If the item has no subtype, omit the :NONE * If the item has no subtype, the ``:NONE`` can be omitted
* If the item is REMAINS, FISH, FISH_RAW, VERMIN, PET, or EGG, * If the item is ``REMAINS``, ``FISH``, ``FISH_RAW``, ``VERMIN``, ``PET``, or ``EGG``,
specify a CREATURE:CASTE pair instead of a material token. specify a ``CREATURE:CASTE`` pair instead of a material token.
* If the item is a ``PLANT_GROWTH``, specify a ``PLANT_ID:GROWTH_ID`` pair
instead of a material token.
Corpses, body parts, and prepared meals cannot be created using this tool. Corpses, body parts, and prepared meals cannot be created using this tool.
Examples:: To obtain the item and material tokens of an existing item, run
``createitem inspect``. Its output can be passed directly as arguments to
``createitem`` to create new matching items, as long as the item type is
supported.
Examples:
* Create 2 pairs of steel gauntlets::
createitem GLOVES:ITEM_GLOVES_GAUNTLETS INORGANIC:STEEL 2 createitem GLOVES:ITEM_GLOVES_GAUNTLETS INORGANIC:STEEL 2
Create 2 pairs of steel gauntlets.
* Create tower-cap logs::
createitem WOOD PLANT_MAT:TOWER_CAP:WOOD createitem WOOD PLANT_MAT:TOWER_CAP:WOOD
Create tower-cap logs.
* Create bilberries::
createitem PLANT_GROWTH BILBERRY:FRUIT
For more examples, :wiki:`see this wiki page <Utility:DFHack/createitem>`. For more examples, :wiki:`see this wiki page <Utility:DFHack/createitem>`.
@ -2914,8 +2991,10 @@ Lua API
Some plugins consist solely of native libraries exposed to Lua. They are listed Some plugins consist solely of native libraries exposed to Lua. They are listed
in the `lua-api` file under `lua-plugins`: in the `lua-api` file under `lua-plugins`:
* `eventful`
* `building-hacks` * `building-hacks`
* `cxxrandom`
* `eventful`
* `luasocket` * `luasocket`
* `map-render` * `map-render`
* `cxxrandom` * `pathable`
* `xlsxreader`

@ -0,0 +1,233 @@
.. _remote:
=======================
DFHack Remote Interface
=======================
DFHack provides a remote access interface that external tools can connect to and
use to interact with DF. This is implemented with `Google protobuf`_ messages
exchanged over a TCP socket. Both the core and plugins can define
remotely-accessible methods, or **RPC methods**. The RPC methods currently
available are not comprehensive, but can be extended with plugins.
.. _Google protobuf: https://developers.google.com/protocol-buffers
.. contents:: Contents
:local:
.. _remote-server-config:
Server configuration
====================
DFHack attempts to start a TCP server to listen for remote connections on
startup. If this fails (due to the port being in use, for example), an error
message will be logged to stderr.log.
The server can be configured by setting options in ``dfhack-config/remote-server.json``:
- ``allow_remote`` (default: ``false``): if true, allows connections from hosts
other than the local machine. This is insecure and may allow arbitrary code
execution on your machine, so it is disabled by default.
- ``port`` (default: ``5000``): the port that the remote server listens on.
Overriding this will allow the server to work if you have multiple instances
of DF running, or if you have something else running on port 5000. Note that
the ``DFHACK_PORT`` `environment variable <env-vars>` takes precedence over
this setting and may be more useful for overriding the port temporarily.
Developing with the remote API
==============================
At a high level, the core and plugins define RPC methods, and external clients
can call these methods. Each method is assigned an ID internally, which clients
use to call it. These method IDs can be obtained using the special ``BindMethod``
method, which has an ID of 0.
Examples
--------
The `dfhack-run` command uses the RPC interface to invoke DFHack commands
(or Lua functions) externally.
Plugins that implement RPC methods include:
- `rename`
- `remotefortressreader`
- `isoworldremote`
Plugins that use the RPC API include:
- `stonesense`
Third-party tools that use the RPC API include:
- `Armok Vision <https://github.com/RosaryMala/armok-vision>`_ (:forums:`Bay12 forums thread <146473>`)
Client libraries
----------------
Some external libraries are available for interacting with the remote interface
from other (non-C++) languages, including:
- `RemoteClientDF-Net <https://github.com/RosaryMala/RemoteClientDF-Net>`_ for C#
- `dfhackrpc <https://github.com/BenLubar/dfhackrpc>`_ for Go
- `dfhack-remote <https://github.com/alexchandel/dfhack-remote>`_ for JavaScript
Protocol description
====================
This is a low-level description of the RPC protocol, which may be useful when
developing custom clients.
A WireShark dissector for this protocol is available in the
`df_misc repo <https://github.com/DFHack/df_misc/blob/master/wireshark_dfhack_rpc.lua>`_.
Built-in messages
-----------------
These messages have hardcoded IDs; all others must be obtained through ``BindMethod``.
=== ============ =============================== =======================
ID Method Input Output
=== ============ =============================== =======================
0 BindMethod dfproto.CoreBindRequest dfproto.CoreBindReply
1 RunCommand dfproto.CoreRunCommandRequest dfproto.EmptyMessage
=== ============ =============================== =======================
Conversation flow
-----------------
* Client → Server: `handshake request`_
* Server → Client: `handshake reply`_
* Repeated 0 or more times:
* Client → Server: `request`_
* Server → Client: `text`_ (0 or more times)
* Server → Client: `result`_ or `failure`_
* Client → Server: `quit`_
Raw message types
-----------------
* All numbers are little-endian
* All strings are ASCII
* A payload size of greater than 64MiB is an error
* See ``RemoteClient.h`` for definitions of constants starting with ``RPC``
handshake request
~~~~~~~~~~~~~~~~~
.. csv-table::
:align: left
:header-rows: 1
Type, Name, Value
char[8], magic, ``DFHack?\n``
int32_t, version, 1
handshake reply
~~~~~~~~~~~~~~~
.. csv-table::
:align: left
:header-rows: 1
Type, Name, Value
char[8], magic, ``DFHack!\n``
int32_t, version, 1
header
~~~~~~
**Note:** the two fields of this message are sometimes repurposed. Uses of this
message are represented as ``header(x, y)``, where ``x`` corresponds to the ``id``
field and ``y`` corresponds to ``size``.
.. csv-table::
:align: left
:header-rows: 1
Type, Name
int16_t, id
int16_t, (padding - unused)
int32_t, size
request
~~~~~~~
.. list-table::
:align: left
:header-rows: 1
:widths: 25 75
* - Type
- Description
* - `header`_
- ``header(id, size)``
* - buffer
- Protobuf-encoded payload of the input message type of the method specified by ``id``; length of ``size`` bytes
text
~~~~
.. list-table::
:align: left
:header-rows: 1
:widths: 25 75
* - Type
- Description
* - `header`_
- ``header(RPC_REPLY_TEXT, size)``
* - buffer
- Protobuf-encoded payload of type ``dfproto.CoreTextNotification``; length of ``size`` bytes
result
~~~~~~
.. list-table::
:align: left
:header-rows: 1
:widths: 25 75
* - Type
- Description
* - `header`_
- ``header(RPC_REPLY_RESULT, size)``
* - buffer
- Protobuf-encoded payload of the output message type of the oldest incomplete method call; when received,
that method call is considered completed. Length of ``size`` bytes.
failure
~~~~~~~
.. list-table::
:align: left
:header-rows: 1
:widths: 25 75
* - Type
- Description
* - `header`_
- ``header(RPC_REPLY_FAIL, command_result)``
* - command_result
- return code of the command (a constant starting with ``CR_``; see ``RemoteClient.h``)
quit
~~~~
**Note:** the server closes the connection after receiving this message.
.. list-table::
:align: left
:header-rows: 1
:widths: 25 75
* - Type
- Description
* - `header`_
- ``header(RPC_REQUEST_QUIT, 0)``

@ -0,0 +1,17 @@
#############
Removed tools
#############
This page lists tools (plugins or scripts) that were previously included in
DFHack but have been removed. It exists primarily so that internal links still
work (e.g. links from the `changelog`).
.. contents:: Contents
:local:
:depth: 1
.. _warn-stuck-trees:
warn-stuck-trees
================
The corresponding DF bug, :bug:`9252` was fixed in DF 0.44.01.

@ -1,14 +0,0 @@
###############
Removed scripts
###############
The following scripts were removed for various reasons.
.. contents::
:depth: 2
.. _warn-stuck-trees:
warn-stuck-trees
================
The corresponding DF bug, :bug:`9252` was fixed in DF 0.44.01.

@ -1,3 +1,5 @@
.. _scripts-index:
############## ##############
DFHack Scripts DFHack Scripts
############## ##############

@ -0,0 +1,34 @@
===================================
DF data definitions (DF-structures)
===================================
DFHack's information about DF's data structures is stored in XML files in the
`df-structures repository <https://github.com/DFHack/df-structures>`_. If you
have `obtained a local copy of the DFHack source <compile-how-to-get-the-code>`,
DF-structures is included as a submodule in ``library/xml``.
Data structure layouts are described in files named with the ``df.*.xml``
pattern. This information is transformed by a Perl script (``codegen.pl``) into
C++ headers, as well as metadata for the Lua wrapper. This ultimately allows
DFHack code to access DF data directly, with the same speed and capabilities as
DF itself, which is an advantage over the older out-of-process approach (used
by debuggers and utilities like Dwarf Therapist). The main disadvantage of this
approach is that any compiled code relying on these layouts will break when DF's
layout changes, and will need to be recompiled for every new DF version.
Addresses of DF global objects and vtables are stored in a separate file,
:file:`symbols.xml`. Since these are only absolute addresses, they do not need
to be compiled in to DFHack code, and are instead loaded at runtime. This makes
fixes and additions to global addresses possible without recompiling DFHack.
In an installed copy of DFHack, this file can be found at the root of the
``hack`` folder.
The following pages contain more detailed information about various aspects
of DF-structures:
.. toctree::
:titlesonly:
/library/xml/SYNTAX
/library/xml/how-to-update

@ -0,0 +1,59 @@
.. include:: <isonum.txt>
========
Maps API
========
DFHack offers several ways to access and manipulate map data.
* C++: the ``Maps`` and ``MapCache`` modules
* Lua: the `dfhack.maps module <lua-maps>`_
* All languages: the ``map`` field of the ``world`` global contains raw map data
when the world is loaded.
.. note::
This page will eventually go into more detail about the available APIs.
For now, it is just an overview of how DF map data is structured.
.. contents:: Contents
:local:
Tiles
=====
The DF map has several types of tiles:
- **Local tiles** are at the smallest scale. In regular fortress/adventure mode
play, the cursor takes up 1 local tile.
Objects that use local tile coordinates include:
- Units
- Items
- Projectiles
- **Blocks** are 16 |times| 16 |times| 1 groups of local tiles. Internally, many
tile details are stored at the block level for space-efficiency reasons.
Blocks are visible during zoomed-in fast travel in adventure mode.
Objects that use block coordinates include:
- Armies
- **Region tiles** are 3 |times| 3 groups of columns of blocks (they span the
entire z-axis), or 48 |times| 48 columns of local tiles. DF sometimes refers
to these as "mid-level tiles" (MLTs). Region tiles are visible when resizing
a fortress before embarking, or in zoomed-out fast travel in adventure mode.
- **World tiles** are
- 16 |times| 16 groups of region tiles, or
- 48 |times| 48 groups of columns of blocks, or
- 768 |times| 768 groups of columns of local tiles
World tiles are visible on the world map before embarking, as well as in the
civilization map in fortress mode and the quest log in adventure mode.
- Some map features are stored in 16 |times| 16 groups of world tiles, sometimes
referred to as "feature shells".

@ -0,0 +1,8 @@
====================
DFHack API Reference
====================
.. toctree::
:maxdepth: 1
/docs/api/Maps

@ -0,0 +1,23 @@
#!/bin/sh
# usage:
# ./build-pdf.sh
# SPHINX=/path/to/sphinx-build ./build-pdf.sh
# JOBS=3 ./build-pdf.sh ...
# all command-line arguments are passed directly to sphinx-build - run
# ``sphinx-build --help`` for a list, or see
# https://www.sphinx-doc.org/en/master/man/sphinx-build.html
cd $(dirname "$0")
cd ..
sphinx=sphinx-build
if [ -n "$SPHINX" ]; then
sphinx=$SPHINX
fi
if [ -z "$JOBS" ]; then
JOBS=2
fi
"$sphinx" -M latexpdf . ./docs/pdf -w ./docs/_sphinx-warnings.txt -j "$JOBS" "$@"

@ -1,9 +1,12 @@
#!/bin/sh #!/bin/sh
# usage: # usage:
# ./build.sh # ./build.sh
# ./build.sh sphinx-executable # SPHINX=/path/to/sphinx-build ./build.sh
# JOBS=3 ./build.sh ... # JOBS=3 ./build.sh ...
# all command-line arguments are passed directly to sphinx-build - run
# ``sphinx-build --help`` for a list, or see
# https://www.sphinx-doc.org/en/master/man/sphinx-build.html
cd $(dirname "$0") cd $(dirname "$0")
cd .. cd ..
@ -17,4 +20,4 @@ if [ -z "$JOBS" ]; then
JOBS=2 JOBS=2
fi fi
"$sphinx" -a -E -q -b html . ./docs/html -w ./docs/_sphinx-warnings.txt -j "$JOBS" "$@" "$sphinx" -a -b html . ./docs/html -w ./docs/_sphinx-warnings.txt -j "$JOBS" "$@"

@ -1,16 +1,10 @@
=== Scroll down for changes === Scroll down for changes
===[[[ ===[[[
===help The text below is included in docs/Documentation.rst - see that file for more details on the changelog setup.
This is kept in this file as a quick syntax reference.
Entries in docs/NEWS.rst and docs/NEWS-dev.rst are generated from ===help
docs/changelog.txt. NEWS.rst groups entries by stable releases, and NEWS-dev.rst
groups them by all releases (stable and development). For example, an entry
listed under "0.44.05-alpha1" in changelog.txt will be listed under that in
NEWS-dev.rst as well, but under "0.44.05-r1" in NEWS.rst (assuming that is the
closest stable release after 0.44.05-alpha1). An entry listed under a stable
release in changelog.txt will be listed under that release in both NEWS.rst and
NEWS-dev.rst.
changelog.txt uses a syntax similar to RST, with a few special sequences: changelog.txt uses a syntax similar to RST, with a few special sequences:
@ -40,12 +34,120 @@ changelog.txt uses a syntax similar to RST, with a few special sequences:
# Future # Future
## Fixes ## Fixes
- Fixed an issue on some Linux systems where DFHack installed through a package manager would attempt to write files to a non-writable folder (notably when running `exportlegends` or `gui/autogems`)
- `buildingplan`: artifacts are now successfully matched when max quality is set to ``artifacts``
- `buildingplan`: no longer erroneously matches items to buildings while the game is paused
- `dwarfmonitor`: fixed a crash when opening the ``prefs`` screen if units have vague preferences
- `embark-assistant`: fixed an issue causing incursion resource matching (e.g. sand/clay) to skip some tiles if those resources were provided only through incursions
- `zone`: fixed an issue causing the ``enumnick`` subcommand to run when attempting to run ``assign``, ``unassign``, or ``slaughter``
## Misc Improvements
- `buildingplan`: all buildings, furniture, and constructions are now supported (except for instruments)
- `buildingplan`: now respects building job_item filters when matching items, so you can set your own programmatic filters for buildings before submitting them to buildingplan
- `buildingplan`: default filter setting for max quality changed from ``artifact`` to ``masterwork``
- `buildingplan`: min quality adjustment hotkeys changed from 'qw' to 'QW' to avoid conflict with existing hotkeys for setting roller speed. max quality adjustment hotkeys changed from 'QW' to 'AS' to make room for the min quality hotkey changes.
- `buildingplan`: new global settings page accessible via ``G`` hotkey when on any building build screen; ``Quickfort Mode`` toggle for legacy Python Quickfort has been moved to this page
- `buildingplan`: new global settings for whether generic building materials should match blocks, boulders, logs, and/or bars. defaults are everything but bars.
- `quickfort`: The Dreamfort sample blueprints now have complete walkthroughs for each fort level and importable orders that automate basic fort stock management
- `quickfort`: More blueprints have been added to the blueprints library: several bedroom layouts, the Saracen Crypts, and the complete fortress example from Python Quickfort: TheQuickFortress
## API
- `buildingplan`: added Lua interface API
- add item type param to dfhack.job.isSuitableMaterial() so the non_economic flag can be properly handled (it was being matched for all item types instead of just boulders)
# 0.47.04-r3
## New Plugins
- `xlsxreader`: provides an API for Lua scripts to read Excel spreadsheets
## Fixes
- `buildingplan`: fixed handling of buildings that require buckets
- `getplants`: fixed a crash that could occur on some maps
- `search`: fixed an issue causing item counts on the trade screen to display inconsistently when searching
- `stockpiles`: fixed a crash when loading food stockpiles
- `stockpiles`: fixed an error when saving furniture stockpiles
## Misc Improvements
- `createitem`: added support for plant growths (fruit, berries, leaves, etc.)
- `createitem`: added an ``inspect`` subcommand to print the item and material tokens of existing items, which can be used to create additional matching items
- `embark-assistant`: added support for searching for taller waterfalls (up to 50 z-levels tall)
- `search`: added support for searching for names containing non-ASCII characters using their ASCII equivalents
- `stocks`: added support for searching for items containing non-ASCII characters using their ASCII equivalents
- `zone`: added an ``enumnick`` subcommand to assign enumerated nicknames (e.g "Hen 1", "Hen 2"...)
- `zone`: added slaughter indication to ``uinfo`` output
## Documentation
- Fixed syntax highlighting of most code blocks to use the appropriate language (or no language) instead of Python
## API
- Added ``DFHack::to_search_normalized()`` (Lua: ``dfhack.toSearchNormalized()``) to convert non-ASCII alphabetic characters to their ASCII equivalents
# 0.47.04-r2
## New Tweaks
- `tweak` do-job-now: adds a job priority toggle to the jobs list
- `tweak` reaction-gloves: adds an option to make reactions produce gloves in sets with correct handedness
## Fixes
- Fixed a segfault when attempting to start a headless session with a graphical PRINT_MODE setting
- Fixed an issue with the macOS launcher failing to un-quarantine some files
- Linux: fixed ``dfhack.getDFPath()`` (Lua) and ``Process::getPath()`` (C++) to always return the DF root path, even if the working directory has changed
- `getplants`: fixed issues causing plants to be collected even if they have no growths (or unripe growths)
- `labormanager`: fixed handling of new jobs in 0.47
- `labormanager`: fixed an issue preventing custom furnaces from being built
- `embark-assistant`: fixed a couple of incursion handling bugs.
- Fixed ``Units::isEggLayer``, ``Units::isGrazer``, ``Units::isMilkable``, ``Units::isTrainableHunting``, ``Units::isTrainableWar``, and ``Units::isTamable`` ignoring the unit's caste
- `RemoteFortressReader`: fixed a couple crashes that could result from decoding invalid enum items (``site_realization_building_type`` and ``improvement_type``)
- `RemoteFortressReader`: fixed an issue that could cause block coordinates to be incorrect
- `rendermax`: fixed a hang that could occur when enabling some renderers, notably on Linux
- `stonesense`: fixed a crash when launching Stonesense
- `stonesense`: fixed some issues that could cause the splash screen to hang
## Misc Improvements
- Linux/macOS: Added console keybindings for deleting words (Alt+Backspace and Alt+d in most terminals)
- `blueprint`: now writes blueprints to the ``blueprints/`` subfolder instead of the df root folder
- `blueprint`: now automatically creates folder trees when organizing blueprints into subfolders (e.g. ``blueprint 30 30 1 rooms/dining dig`` will create the file ``blueprints/rooms/dining-dig.csv``); previously it would fail if the ``blueprints/rooms/`` directory didn't already exist
- `confirm`: added a confirmation dialog for convicting dwarves of crimes
- `manipulator`: added a new column option to display units' goals
## API
- Added ``Filesystem::mkdir_recursive``
- Extended ``Filesystem::listdir_recursive`` to optionally make returned filenames relative to the start directory
- ``Units``: added goal-related functions: ``getGoalType()``, ``getGoalName()``, ``isGoalAchieved()``
## Internals
- Added support for splitting scripts into multiple files in the ``scripts/internal`` folder without polluting the output of `ls`
## Lua
- Added a ``ref_target`` field to primitive field references, corresponding to the ``ref-target`` XML attribute
- Made ``dfhack.units.getRaceNameById()``, ``dfhack.units.getRaceBabyNameById()``, and ``dfhack.units.getRaceChildNameById()`` available to Lua
## Ruby
- Updated ``item_find`` and ``building_find`` to use centralized logic that works on more screens
## Documentation
- Expanded the installation guide
- Added some new dev-facing pages, including dedicated pages about the remote API, memory research, and documentation
- Made a couple theme adjustments
# 0.47.04-r1
## Fixes
- Fixed translation of certain types of in-game names
- Fixed a crash in ``find()`` for some types when no world is loaded
- `autogems`: fixed an issue with binned gems being ignored in linked stockpiles
- `stocks`: fixed display of book titles
- `tweak` embark-profile-name: fixed handling of the native shift+space key - `tweak` embark-profile-name: fixed handling of the native shift+space key
## Misc Improvements ## Misc Improvements
- ``dfhack.init-example``: enabled `autodump`
- `getplants`: added switches for designations for farming seeds and for max number designated per plant
- `manipulator`: added intrigue to displayed skills - `manipulator`: added intrigue to displayed skills
- `search`: added support for the fortress mode justice screen - `search`: added support for the fortress mode justice screen
## API
- Added ``Items::getBookTitle`` to get titles of books. Catches titles buried in improvements, unlike getDescription.
## Lua ## Lua
- ``pairs()`` now returns available class methods for DF types - ``pairs()`` now returns available class methods for DF types

@ -1,284 +1,5 @@
import collections import os, sys
import copy sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'sphinx_extensions'))
import itertools
import os
import sys
CHANGELOG_PATHS = ( from dfhack.changelog import cli_entrypoint
'docs/changelog.txt', cli_entrypoint()
'scripts/changelog.txt',
'library/xml/changelog.txt',
)
CHANGELOG_SECTIONS = [
'New Plugins',
'New Scripts',
'New Tweaks',
'New Features',
'New Internal Commands',
'Fixes',
'Misc Improvements',
'Removed',
'API',
'Internals',
'Lua',
'Ruby',
'Structures',
]
REPLACEMENTS = {
'`search`': '`search-plugin`',
}
def to_title_case(word):
if word == word.upper():
# Preserve acronyms
return word
return word[0].upper() + word[1:].lower()
def find_all_indices(string, substr):
start = 0
while True:
i = string.find(substr, start)
if i == -1:
return
yield i
start = i + 1
def replace_text(string, replacements):
for old_text, new_text in replacements.items():
new_string = ''
new_string_end = 0 # number of characters from string in new_string
for i in find_all_indices(string, old_text):
if i > 0 and string[i - 1] == '!':
# exempt if preceded by '!'
new_string += string[new_string_end:i - 1]
new_string += old_text
else:
# copy until this occurrence
new_string += string[new_string_end:i]
new_string += new_text
new_string_end = i + len(old_text)
new_string += string[new_string_end:]
string = new_string
return string
class ChangelogEntry(object):
def __init__(self, text, section, stable_version, dev_version):
text = text.lstrip('- ')
# normalize section to title case
self.section = ' '.join(map(to_title_case, section.strip().split()))
self.stable_version = stable_version
self.dev_version = dev_version
self.dev_only = text.startswith('@')
text = text.lstrip('@ ')
self.children = []
split_index = text.find(': ')
if split_index != -1:
self.feature, description = text[:split_index], text[split_index+1:]
if description.strip():
self.children.insert(0, description.strip())
else:
self.feature = text
self.feature = self.feature.replace(':\\', ':').rstrip(':')
self.sort_key = self.feature.upper()
def __repr__(self):
return 'ChangelogEntry(%r, %r)' % (self.feature, self.children)
def parse_changelog():
entries = []
for fpath in CHANGELOG_PATHS:
if not os.path.isfile(fpath):
continue
with open(fpath) as f:
cur_stable = None
cur_dev = None
cur_section = None
last_entry = None
multiline = ''
for line_id, line in enumerate(f.readlines()):
line_id += 1
if multiline:
multiline += line
elif '[[[' in line:
multiline = line.replace('[[[', '')
if ']]]' in multiline:
line = multiline.replace(']]]', '')
multiline = ''
elif multiline:
continue
if not line.strip() or line.startswith('==='):
continue
if line.startswith('##'):
cur_section = line.lstrip('#').strip()
elif line.startswith('#'):
cur_dev = line.lstrip('#').strip().lower()
if ('alpha' not in cur_dev and 'beta' not in cur_dev and
'rc' not in cur_dev):
cur_stable = cur_dev
elif line.startswith('-'):
if not cur_stable or not cur_dev or not cur_section:
raise ValueError(
'%s:%i: Entry without section' % (fpath, line_id))
last_entry = ChangelogEntry(line.strip(), cur_section,
cur_stable, cur_dev)
entries.append(last_entry)
elif line.lstrip().startswith('-'):
if not cur_stable or not cur_dev:
raise ValueError(
'%s:%i: Sub-entry without section' % (fpath, line_id))
if not last_entry:
raise ValueError(
'%s:%i: Sub-entry without parent' % (fpath, line_id))
last_entry.children.append(line.strip('- \n'))
else:
raise ValueError('Invalid line: ' + line)
if not entries:
raise RuntimeError('No changelog files with contents found')
return entries
def consolidate_changelog(all_entries):
for sections in all_entries.values():
for section, entries in sections.items():
# sort() is stable, so reverse entries so that older entries for the
# same feature are on top
entries.reverse()
entries.sort(key=lambda entry: entry.sort_key)
new_entries = []
for feature, group in itertools.groupby(entries,
lambda e: e.feature):
old_entries = list(group)
children = list(itertools.chain(*[entry.children
for entry in old_entries]))
new_entry = copy.deepcopy(old_entries[0])
new_entry.children = children
new_entries.append(new_entry)
entries[:] = new_entries
def print_changelog(versions, all_entries, path, replace=True, prefix=''):
# all_entries: version -> section -> entry
with open(path, 'w') as f:
def write(line):
if replace:
line = replace_text(line, REPLACEMENTS)
f.write(prefix + line + '\n')
for version in versions:
sections = all_entries[version]
if not sections:
continue
version = 'DFHack ' + version
write(version)
write('=' * len(version))
write('')
for section in CHANGELOG_SECTIONS:
entries = sections[section]
if not entries:
continue
write(section)
write('-' * len(section))
for entry in entries:
if len(entry.children) == 1:
write('- ' + entry.feature + ': ' +
entry.children[0].strip('- '))
continue
elif entry.children:
write('- ' + entry.feature + ':')
write('')
for child in entry.children:
write(' - ' + child)
write('')
else:
write('- ' + entry.feature)
write('')
write('')
def generate_changelog(all=False):
entries = parse_changelog()
# scan for unrecognized sections
for entry in entries:
if entry.section not in CHANGELOG_SECTIONS:
raise RuntimeWarning('Unknown section: ' + entry.section)
# ordered versions
versions = ['future']
# map versions to stable versions
stable_version_map = {}
# version -> section -> entry
stable_entries = collections.defaultdict(lambda:
collections.defaultdict(list))
dev_entries = collections.defaultdict(lambda:
collections.defaultdict(list))
for entry in entries:
# build list of all versions
if entry.dev_version not in versions:
versions.append(entry.dev_version)
stable_version_map.setdefault(entry.dev_version, entry.stable_version)
if not entry.dev_only:
# add non-dev-only entries to both changelogs
stable_entries[entry.stable_version][entry.section].append(entry)
dev_entries[entry.dev_version][entry.section].append(entry)
consolidate_changelog(stable_entries)
print_changelog(versions, stable_entries, 'docs/_auto/news.rst')
print_changelog(versions, dev_entries, 'docs/_auto/news-dev.rst')
if all:
for version in versions:
if version not in stable_version_map:
print('warn: skipping ' + version)
continue
if stable_version_map[version] == version:
version_entries = {version: stable_entries[version]}
else:
version_entries = {version: dev_entries[version]}
print_changelog([version], version_entries,
'docs/_changelogs/%s-github.txt' % version,
replace=False)
print_changelog([version], version_entries,
'docs/_changelogs/%s-reddit.txt' % version,
replace=False,
prefix='> ')
return entries
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', '--all', action='store_true',
help='Print changelogs for all versions to docs/_changelogs')
parser.add_argument('-c', '--check', action='store_true',
help='Check that all entries are printed')
args = parser.parse_args()
os.chdir(os.path.abspath(os.path.dirname(__file__)))
os.chdir('..')
entries = generate_changelog(all=args.all)
if args.check:
with open('docs/_auto/news.rst') as f:
content_stable = f.read()
with open('docs/_auto/news-dev.rst') as f:
content_dev = f.read()
for entry in entries:
for description in entry.children:
if not entry.dev_only and description not in content_stable:
print('stable missing: ' + description)
if description not in content_dev:
print('dev missing: ' + description)

@ -0,0 +1,11 @@
===========
User Guides
===========
These pages are detailed guides covering DFHack tools.
.. toctree::
:maxdepth: 1
:glob:
*

File diff suppressed because it is too large Load Diff

@ -0,0 +1,13 @@
============
About DFHack
============
These pages contain information about the general DFHack project.
.. toctree::
:maxdepth: 1
/docs/NEWS
/docs/Authors
/LICENSE
/docs/Removed

@ -0,0 +1,21 @@
========================
DFHack Development Guide
========================
These are pages relevant to people developing for DFHack.
.. toctree::
:maxdepth: 1
/docs/Dev-intro
/docs/Contributing
/docs/Compile
/docs/NEWS-dev
/docs/Lua API
/docs/Remote
/docs/api/index
/docs/Documentation
/docs/Structures-intro
/docs/Memory-research
/docs/Binpatches

@ -0,0 +1,306 @@
import collections
import copy
import itertools
import os
import sys
from sphinx.errors import ExtensionError, SphinxError, SphinxWarning
from dfhack.util import DFHACK_ROOT, DOCS_ROOT
CHANGELOG_PATHS = (
'docs/changelog.txt',
'scripts/changelog.txt',
'library/xml/changelog.txt',
)
CHANGELOG_PATHS = (os.path.join(DFHACK_ROOT, p) for p in CHANGELOG_PATHS)
CHANGELOG_SECTIONS = [
'New Plugins',
'New Scripts',
'New Tweaks',
'New Features',
'New Internal Commands',
'Fixes',
'Misc Improvements',
'Removed',
'API',
'Internals',
'Lua',
'Ruby',
'Structures',
'Documentation',
]
REPLACEMENTS = {
'`search`': '`search-plugin`',
}
def to_title_case(word):
if word == word.upper():
# Preserve acronyms
return word
return word[0].upper() + word[1:].lower()
def find_all_indices(string, substr):
start = 0
while True:
i = string.find(substr, start)
if i == -1:
return
yield i
start = i + 1
def replace_text(string, replacements):
for old_text, new_text in replacements.items():
new_string = ''
new_string_end = 0 # number of characters from string in new_string
for i in find_all_indices(string, old_text):
if i > 0 and string[i - 1] == '!':
# exempt if preceded by '!'
new_string += string[new_string_end:i - 1]
new_string += old_text
else:
# copy until this occurrence
new_string += string[new_string_end:i]
new_string += new_text
new_string_end = i + len(old_text)
new_string += string[new_string_end:]
string = new_string
return string
class ChangelogEntry(object):
def __init__(self, text, section, stable_version, dev_version):
text = text.lstrip('- ')
# normalize section to title case
self.section = ' '.join(map(to_title_case, section.strip().split()))
self.stable_version = stable_version
self.dev_version = dev_version
self.dev_only = text.startswith('@')
text = text.lstrip('@ ')
self.children = []
split_index = text.find(': ')
if split_index != -1:
self.feature, description = text[:split_index], text[split_index+1:]
if description.strip():
self.children.insert(0, description.strip())
else:
self.feature = text
self.feature = self.feature.replace(':\\', ':').rstrip(':')
self.sort_key = self.feature.upper()
def __repr__(self):
return 'ChangelogEntry(%r, %r)' % (self.feature, self.children)
def parse_changelog():
entries = []
for fpath in CHANGELOG_PATHS:
if not os.path.isfile(fpath):
continue
with open(fpath) as f:
cur_stable = None
cur_dev = None
cur_section = None
last_entry = None
multiline = ''
for line_id, line in enumerate(f.readlines()):
line_id += 1
if multiline:
multiline += line
elif '[[[' in line:
multiline = line.replace('[[[', '')
if ']]]' in multiline:
line = multiline.replace(']]]', '')
multiline = ''
elif multiline:
continue
if not line.strip() or line.startswith('==='):
continue
if line.startswith('##'):
cur_section = line.lstrip('#').strip()
elif line.startswith('#'):
cur_dev = line.lstrip('#').strip().lower()
if ('alpha' not in cur_dev and 'beta' not in cur_dev and
'rc' not in cur_dev):
cur_stable = cur_dev
elif line.startswith('-'):
if not cur_stable or not cur_dev or not cur_section:
raise ValueError(
'%s:%i: Entry without section' % (fpath, line_id))
last_entry = ChangelogEntry(line.strip(), cur_section,
cur_stable, cur_dev)
entries.append(last_entry)
elif line.lstrip().startswith('-'):
if not cur_stable or not cur_dev:
raise ValueError(
'%s:%i: Sub-entry without section' % (fpath, line_id))
if not last_entry:
raise ValueError(
'%s:%i: Sub-entry without parent' % (fpath, line_id))
last_entry.children.append(line.strip('- \n'))
else:
raise ValueError('Invalid line: ' + line)
if not entries:
raise RuntimeError('No changelog files with contents found')
return entries
def consolidate_changelog(all_entries):
for sections in all_entries.values():
for section, entries in sections.items():
# sort() is stable, so reverse entries so that older entries for the
# same feature are on top
entries.reverse()
entries.sort(key=lambda entry: entry.sort_key)
new_entries = []
for feature, group in itertools.groupby(entries,
lambda e: e.feature):
old_entries = list(group)
children = list(itertools.chain(*[entry.children
for entry in old_entries]))
new_entry = copy.deepcopy(old_entries[0])
new_entry.children = children
new_entries.append(new_entry)
entries[:] = new_entries
def print_changelog(versions, all_entries, path, replace=True, prefix=''):
# all_entries: version -> section -> entry
with open(path, 'w') as f:
def write(line):
if replace:
line = replace_text(line, REPLACEMENTS)
f.write(prefix + line + '\n')
for version in versions:
sections = all_entries[version]
if not sections:
continue
version = 'DFHack ' + version
write(version)
write('=' * len(version))
write('')
for section in CHANGELOG_SECTIONS:
entries = sections[section]
if not entries:
continue
write(section)
write('-' * len(section))
for entry in entries:
if len(entry.children) == 1:
write('- ' + entry.feature + ': ' +
entry.children[0].strip('- '))
continue
elif entry.children:
write('- ' + entry.feature + ':')
for child in entry.children:
write(' - ' + child)
else:
write('- ' + entry.feature)
write('')
write('')
def generate_changelog(all=False):
entries = parse_changelog()
# scan for unrecognized sections
for entry in entries:
if entry.section not in CHANGELOG_SECTIONS:
raise SphinxWarning('Unknown section: ' + entry.section)
# ordered versions
versions = ['future']
# map versions to stable versions
stable_version_map = {}
# version -> section -> entry
stable_entries = collections.defaultdict(lambda:
collections.defaultdict(list))
dev_entries = collections.defaultdict(lambda:
collections.defaultdict(list))
for entry in entries:
# build list of all versions
if entry.dev_version not in versions:
versions.append(entry.dev_version)
stable_version_map.setdefault(entry.dev_version, entry.stable_version)
if not entry.dev_only:
# add non-dev-only entries to both changelogs
stable_entries[entry.stable_version][entry.section].append(entry)
dev_entries[entry.dev_version][entry.section].append(entry)
consolidate_changelog(stable_entries)
consolidate_changelog(dev_entries)
print_changelog(versions, stable_entries, os.path.join(DOCS_ROOT, '_auto/news.rst'))
print_changelog(versions, dev_entries, os.path.join(DOCS_ROOT, '_auto/news-dev.rst'))
if all:
for version in versions:
if version not in stable_version_map:
print('warn: skipping ' + version)
continue
if stable_version_map[version] == version:
version_entries = {version: stable_entries[version]}
else:
version_entries = {version: dev_entries[version]}
print_changelog([version], version_entries,
os.path.join(DOCS_ROOT, '_changelogs/%s-github.txt' % version),
replace=False)
print_changelog([version], version_entries,
os.path.join(DOCS_ROOT, '_changelogs/%s-reddit.txt' % version),
replace=False,
prefix='> ')
return entries
def cli_entrypoint():
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', '--all', action='store_true',
help='Print changelogs for all versions to docs/_changelogs')
parser.add_argument('-c', '--check', action='store_true',
help='Check that all entries are printed')
args = parser.parse_args()
entries = generate_changelog(all=args.all)
if args.check:
with open(os.path.join(DOCS_ROOT, '_auto/news.rst')) as f:
content_stable = f.read()
with open(os.path.join(DOCS_ROOT, '_auto/news-dev.rst')) as f:
content_dev = f.read()
for entry in entries:
for description in entry.children:
if not entry.dev_only and description not in content_stable:
print('stable missing: ' + description)
if description not in content_dev:
print('dev missing: ' + description)
def sphinx_entrypoint(app, config):
try:
generate_changelog()
except SphinxError:
raise
except Exception as e:
raise ExtensionError(str(e), e)
def setup(app):
app.connect('config-inited', sphinx_entrypoint)
return {
'version': '0.1',
'parallel_read_safe': True,
'parallel_write_safe': True,
}

@ -0,0 +1,34 @@
# adapted from:
# https://stackoverflow.com/a/16470058
# https://pygments.org/docs/lexerdevelopment/
import re
from pygments.lexer import RegexLexer
from pygments.token import Comment, Generic, Text
from sphinx.highlighting import lexers
class DFHackLexer(RegexLexer):
name = 'DFHack'
aliases = ['dfhack']
flags = re.IGNORECASE | re.MULTILINE
tokens = {
'root': [
(r'\#.+$', Comment.Single),
(r'^\[[a-z]+\]\# ', Generic.Prompt),
(r'.+?', Text),
]
}
def register_lexer(app):
lexers['dfhack'] = DFHackLexer()
def setup(app):
app.connect('builder-inited', register_lexer)
return {
'version': '0.1',
'parallel_read_safe': True,
'parallel_write_safe': True,
}

@ -0,0 +1,7 @@
import os
DFHACK_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
DOCS_ROOT = os.path.join(DFHACK_ROOT, 'docs')
if not os.path.isdir(DOCS_ROOT):
raise ReferenceError('docs root not found: %s' % DOCS_ROOT)

@ -1,6 +1,3 @@
/* make sure to sync this with the base theme's css filename */
@import url("alabaster.css");
/* Keybinding CSS from the DF wiki; applies to :kbd:`` directives. /* Keybinding CSS from the DF wiki; applies to :kbd:`` directives.
* Use this directive for all keypresses, to make them look like keys. * Use this directive for all keypresses, to make them look like keys.
*/ */
@ -46,3 +43,20 @@ div.body p, div.body dd, div.body li, div.body blockquote {
-webkit-hyphens: manual; -webkit-hyphens: manual;
hyphens: manual; hyphens: manual;
} }
div.sphinxsidebar {
max-height: 100%;
overflow-y: auto;
}
div.sphinxsidebar h3.logo-name a {
border-bottom: 1px dotted #999;
}
div.body {
min-width: unset;
}
span.pre {
overflow-wrap: break-word;
}

@ -0,0 +1,6 @@
<p class="logo">
<a href="{{ pathto(master_doc) }}">
<img class="logo" src="{{ pathto('_static/' ~ theme_logo, 1) }}" alt="Logo"/>
<h3 class="logo logo-name">Home</h3>
</a>
</p>

@ -2,33 +2,23 @@
Welcome to DFHack's documentation! Welcome to DFHack's documentation!
################################## ##################################
Introduction DFHack is a memory editing library for `Dwarf Fortress <https://www.bay12games.com/dwarves/>`_
============ that provides a unified, cross-platform environment where tools can be developed
DFHack is a Dwarf Fortress memory access library, distributed with to extend the game. The default distribution contains a variety of tools, including
a wide variety of useful scripts and plugins. bugfixes, interface improvements, automation tools, modding tools, and more.
There are also a variety of third-party tools available.
The project is currently hosted at https://www.github.com/DFHack/dfhack, .. _quick-links:
and can be downloaded from `the releases page
<http://github.com/DFHack/dfhack/releases>`_.
All new releases are announced in :forums:`the bay12 forums thread <139553>`, Quick Links
which is also a good place for discussion and questions. ===========
For users, it provides a significant suite of bugfixes and interface
enhancements by default, and more can be enabled. There are also many tools
(such as `workflow` or `autodump`) which can make life easier.
You can even add third-party scripts and plugins to do almost anything!
For modders, DFHack makes many things possible. Custom reactions, new
interactions, magic creature abilities, and more can be set through `modtools`
and custom raws. Non-standard DFHack scripts and inits can be stored in the
raw directory, making raws or saves fully self-contained for distribution -
or for coexistence in a single DF install, even with incompatible components.
For developers, DFHack unites the various ways tools access DF memory and
allows easier development of new tools. As an open-source project under
`various copyleft licences <license>`, contributions are welcome.
* `Downloads <https://www.github.com/DFHack/dfhack/releases>`_
* `Installation guide <installing>`
* `Source code <https://www.github.com/DFHack/dfhack>`_
(**important:** read `compile` before attempting to build from source)
* `Bay 12 forums thread <https://dfhack.org/bay12>`_
* `Bug tracker <https://www.github.com/DFHack/dfhack/issues>`_
User Manual User Manual
=========== ===========
@ -37,31 +27,10 @@ User Manual
:maxdepth: 2 :maxdepth: 2
/docs/Introduction /docs/Introduction
/docs/Installing
/docs/Core /docs/Core
/docs/Plugins /docs/Plugins
/docs/Scripts /docs/Scripts
/docs/guides/index
Other Contents /docs/index-about
============== /docs/index-dev
.. toctree::
:maxdepth: 1
/docs/Authors
/LICENSE
/docs/NEWS
/docs/Scripts-removed
For Developers
==============
.. toctree::
:maxdepth: 1
/Contributing
/docs/Compile
/docs/NEWS-dev
/docs/Lua API
/library/xml/SYNTAX
/library/xml/how-to-update
/docs/Binpatches

@ -40,6 +40,8 @@ set(MAIN_HEADERS
include/Module.h include/Module.h
include/Pragma.h include/Pragma.h
include/MemAccess.h include/MemAccess.h
include/PluginManager.h
include/PluginStatics.h
include/Signal.hpp include/Signal.hpp
include/TileTypes.h include/TileTypes.h
include/Types.h include/Types.h
@ -72,6 +74,7 @@ set(MAIN_SOURCES
MiscUtils.cpp MiscUtils.cpp
Types.cpp Types.cpp
PluginManager.cpp PluginManager.cpp
PluginStatics.cpp
TileTypes.cpp TileTypes.cpp
VersionInfoFactory.cpp VersionInfoFactory.cpp
RemoteClient.cpp RemoteClient.cpp

@ -541,6 +541,7 @@ namespace DFHack
return Console::SHUTDOWN; return Console::SHUTDOWN;
} }
lock->lock(); lock->lock();
const int old_cursor = raw_cursor;
/* Only autocomplete when the callback is set. It returns < 0 when /* Only autocomplete when the callback is set. It returns < 0 when
* there was an error reading from fd. Otherwise it will return the * there was an error reading from fd. Otherwise it will return the
* character that should be handled next. */ * character that should be handled next. */
@ -597,6 +598,29 @@ namespace DFHack
{ {
forward_word(); forward_word();
} }
else if (seq[0] == 127 || seq[0] == 8) // backspace || ctrl-h
{
// delete word
back_word();
if (old_cursor > raw_cursor)
{
yank_buffer = raw_buffer.substr(raw_cursor, old_cursor - raw_cursor);
raw_buffer.erase(raw_cursor, old_cursor - raw_cursor);
prompt_refresh();
}
}
else if (seq[0] == 'd')
{
// delete word forward
forward_word();
if (old_cursor < raw_cursor)
{
yank_buffer = raw_buffer.substr(old_cursor, raw_cursor - old_cursor);
raw_buffer.erase(old_cursor, raw_cursor - old_cursor);
raw_cursor = old_cursor;
prompt_refresh();
}
}
else if(seq[0] == '[') else if(seq[0] == '[')
{ {
if (!read_char(seq[1])) if (!read_char(seq[1]))

@ -317,7 +317,7 @@ static void listScripts(PluginManager *plug_mgr, std::map<string,string> &pset,
pset[key] = help; pset[key] = help;
} }
} }
else if (all && !files[i].empty() && files[i][0] != '.') else if (all && !files[i].empty() && files[i][0] != '.' && files[i] != "internal")
{ {
listScripts(plug_mgr, pset, path+files[i]+"/", all, prefix+files[i]+"/"); listScripts(plug_mgr, pset, path+files[i]+"/", all, prefix+files[i]+"/");
} }
@ -1618,7 +1618,10 @@ bool Core::Init()
freopen("stderr.log", "w", stderr); freopen("stderr.log", "w", stderr);
#endif #endif
fprintf(stderr, "DFHack build: %s\n", Version::git_description()); Filesystem::init();
cerr << "DFHack build: " << Version::git_description() << "\n"
<< "Starting with working directory: " << Filesystem::getcwd() << endl;
// find out what we are... // find out what we are...
#ifdef LINUX_BUILD #ifdef LINUX_BUILD
@ -1692,14 +1695,21 @@ bool Core::Init()
if (is_headless) if (is_headless)
{ {
#ifdef LINUX_BUILD #ifdef LINUX_BUILD
auto endwin = (int(*)(void))dlsym(RTLD_DEFAULT, "endwin"); if (is_text_mode)
if (endwin)
{ {
endwin(); auto endwin = (int(*)(void))dlsym(RTLD_DEFAULT, "endwin");
if (endwin)
{
endwin();
}
else
{
cerr << "endwin(): bind failed" << endl;
}
} }
else else
{ {
cerr << "endwin(): bind failed" << endl; cerr << "Headless mode requires PRINT_MODE:TEXT" << endl;
} }
#else #else
cerr << "Headless mode not supported on Windows" << endl; cerr << "Headless mode not supported on Windows" << endl;
@ -1730,18 +1740,35 @@ bool Core::Init()
virtual_identity::Init(this); virtual_identity::Init(this);
// copy over default config files if necessary // copy over default config files if necessary
std::vector<std::string> config_files; std::map<std::string, bool> config_files;
std::vector<std::string> default_config_files; std::map<std::string, bool> default_config_files;
if (Filesystem::listdir("dfhack-config", config_files) != 0) if (Filesystem::listdir_recursive("dfhack-config", config_files, 10, false) != 0)
con.printerr("Failed to list directory: dfhack-config"); con.printerr("Failed to list directory: dfhack-config");
else if (Filesystem::listdir("dfhack-config/default", default_config_files) != 0) else if (Filesystem::listdir_recursive("dfhack-config/default", default_config_files, 10, false) != 0)
con.printerr("Failed to list directory: dfhack-config/default"); con.printerr("Failed to list directory: dfhack-config/default");
else else
{ {
// ensure all config file directories exist before we start copying files
for (auto it = default_config_files.begin(); it != default_config_files.end(); ++it)
{
// skip over files
if (!it->second)
continue;
std::string dirname = "dfhack-config/" + it->first;
if (!Filesystem::mkdir_recursive(dirname))
{
con.printerr("Failed to create config directory: '%s'\n", dirname.c_str());
}
}
// copy files from the default tree that don't already exist in the config tree
for (auto it = default_config_files.begin(); it != default_config_files.end(); ++it) for (auto it = default_config_files.begin(); it != default_config_files.end(); ++it)
{ {
std::string filename = *it; // skip over directories
if (std::find(config_files.begin(), config_files.end(), filename) == config_files.end()) if (it->second)
continue;
std::string filename = it->first;
if (config_files.find(filename) == config_files.end())
{ {
std::string src_file = std::string("dfhack-config/default/") + filename; std::string src_file = std::string("dfhack-config/default/") + filename;
if (!Filesystem::isfile(src_file)) if (!Filesystem::isfile(src_file))

@ -334,7 +334,7 @@ virtual_identity *virtual_identity::find(void *vtable)
return p; return p;
} }
std::cerr << "UNKNOWN CLASS '" << name << "': vtable = 0x" std::cerr << "Class not in symbols.xml: '" << name << "': vtable = 0x"
<< std::hex << uintptr_t(vtable) << std::dec << std::endl; << std::hex << uintptr_t(vtable) << std::dec << std::endl;
known[vtable] = NULL; known[vtable] = NULL;

@ -12,10 +12,11 @@
namespace { namespace {
template<class T> template<class T>
inline T &_toref(T &r) { return r; } inline T *_toptr(T &r) { return &r; }
template<class T> template<class T>
inline T &_toref(T *&p) { return *p; } inline T *_toptr(T *&p) { return p; }
} }
#define _fieldptr(ptr, fn) (ptr) ? _toptr((ptr)->fn) : NULL
#define INIT_GLOBAL_FUNCTION_PREFIX \ #define INIT_GLOBAL_FUNCTION_PREFIX \
DFHack::VersionInfo *global_table_ = DFHack::Core::getInstance().vinfo.get(); \ DFHack::VersionInfo *global_table_ = DFHack::Core::getInstance().vinfo.get(); \

@ -1417,6 +1417,7 @@ static bool isMapLoaded() { return Core::getInstance().isMapLoaded(); }
static std::string df2utf(std::string s) { return DF2UTF(s); } static std::string df2utf(std::string s) { return DF2UTF(s); }
static std::string utf2df(std::string s) { return UTF2DF(s); } static std::string utf2df(std::string s) { return UTF2DF(s); }
static std::string df2console(color_ostream &out, std::string s) { return DF2CONSOLE(out, s); } static std::string df2console(color_ostream &out, std::string s) { return DF2CONSOLE(out, s); }
static std::string toSearchNormalized(std::string s) { return to_search_normalized(s); }
#define WRAP_VERSION_FUNC(name, function) WRAPN(name, DFHack::Version::function) #define WRAP_VERSION_FUNC(name, function) WRAPN(name, DFHack::Version::function)
@ -1434,6 +1435,7 @@ static const LuaWrapper::FunctionReg dfhack_module[] = {
WRAP(df2utf), WRAP(df2utf),
WRAP(utf2df), WRAP(utf2df),
WRAP(df2console), WRAP(df2console),
WRAP(toSearchNormalized),
WRAP_VERSION_FUNC(getDFHackVersion, dfhack_version), WRAP_VERSION_FUNC(getDFHackVersion, dfhack_version),
WRAP_VERSION_FUNC(getDFHackRelease, dfhack_release), WRAP_VERSION_FUNC(getDFHackRelease, dfhack_release),
WRAP_VERSION_FUNC(getDFHackBuildID, dfhack_build_id), WRAP_VERSION_FUNC(getDFHackBuildID, dfhack_build_id),
@ -1604,6 +1606,9 @@ static const LuaWrapper::FunctionReg dfhack_units_module[] = {
WRAPM(Units, getCasteProfessionName), WRAPM(Units, getCasteProfessionName),
WRAPM(Units, getProfessionColor), WRAPM(Units, getProfessionColor),
WRAPM(Units, getCasteProfessionColor), WRAPM(Units, getCasteProfessionColor),
WRAPM(Units, getGoalType),
WRAPM(Units, getGoalName),
WRAPM(Units, isGoalAchieved),
WRAPM(Units, getSquadName), WRAPM(Units, getSquadName),
WRAPM(Units, isWar), WRAPM(Units, isWar),
WRAPM(Units, isHunter), WRAPM(Units, isHunter),
@ -1614,8 +1619,11 @@ static const LuaWrapper::FunctionReg dfhack_units_module[] = {
WRAPM(Units, getPhysicalDescription), WRAPM(Units, getPhysicalDescription),
WRAPM(Units, getRaceName), WRAPM(Units, getRaceName),
WRAPM(Units, getRaceNamePlural), WRAPM(Units, getRaceNamePlural),
WRAPM(Units, getRaceNameById),
WRAPM(Units, getRaceBabyName), WRAPM(Units, getRaceBabyName),
WRAPM(Units, getRaceBabyNameById),
WRAPM(Units, getRaceChildName), WRAPM(Units, getRaceChildName),
WRAPM(Units, getRaceChildNameById),
WRAPM(Units, isBaby), WRAPM(Units, isBaby),
WRAPM(Units, isChild), WRAPM(Units, isChild),
WRAPM(Units, isAdult), WRAPM(Units, isAdult),
@ -1766,6 +1774,7 @@ static const LuaWrapper::FunctionReg dfhack_items_module[] = {
WRAPM(Items, getContainer), WRAPM(Items, getContainer),
WRAPM(Items, getHolderBuilding), WRAPM(Items, getHolderBuilding),
WRAPM(Items, getHolderUnit), WRAPM(Items, getHolderUnit),
WRAPM(Items, getBookTitle),
WRAPM(Items, getDescription), WRAPM(Items, getDescription),
WRAPM(Items, isCasteMaterial), WRAPM(Items, isCasteMaterial),
WRAPM(Items, getSubtypeCount), WRAPM(Items, getSubtypeCount),
@ -2362,8 +2371,11 @@ static const luaL_Reg dfhack_screen_funcs[] = {
static const LuaWrapper::FunctionReg dfhack_filesystem_module[] = { static const LuaWrapper::FunctionReg dfhack_filesystem_module[] = {
WRAPM(Filesystem, getcwd), WRAPM(Filesystem, getcwd),
WRAPM(Filesystem, restore_cwd),
WRAPM(Filesystem, get_initial_cwd),
WRAPM(Filesystem, chdir), WRAPM(Filesystem, chdir),
WRAPM(Filesystem, mkdir), WRAPM(Filesystem, mkdir),
WRAPM(Filesystem, mkdir_recursive),
WRAPM(Filesystem, rmdir), WRAPM(Filesystem, rmdir),
WRAPM(Filesystem, exists), WRAPM(Filesystem, exists),
WRAPM(Filesystem, isfile), WRAPM(Filesystem, isfile),
@ -2402,10 +2414,13 @@ static int filesystem_listdir_recursive(lua_State *L)
luaL_checktype(L,1,LUA_TSTRING); luaL_checktype(L,1,LUA_TSTRING);
std::string dir=lua_tostring(L,1); std::string dir=lua_tostring(L,1);
int depth = 10; int depth = 10;
if (lua_type(L, 2) == LUA_TNUMBER) if (lua_gettop(L) >= 2 && !lua_isnil(L, 2))
depth = lua_tounsigned(L, 2); depth = luaL_checkint(L, 2);
bool include_prefix = true;
if (lua_gettop(L) >= 3 && !lua_isnil(L, 3))
include_prefix = lua_toboolean(L, 3);
std::map<std::string, bool> files; std::map<std::string, bool> files;
int err = DFHack::Filesystem::listdir_recursive(dir, files, depth); int err = DFHack::Filesystem::listdir_recursive(dir, files, depth, include_prefix);
if (err) if (err)
{ {
lua_pushnil(L); lua_pushnil(L);

@ -536,6 +536,7 @@ static void field_reference(lua_State *state, const struct_field_info *field, vo
case struct_field_info::PRIMITIVE: case struct_field_info::PRIMITIVE:
case struct_field_info::SUBSTRUCT: case struct_field_info::SUBSTRUCT:
push_object_internal(state, field->type, ptr); push_object_internal(state, field->type, ptr);
get_object_ref_header(state, -1)->field_info = field;
return; return;
case struct_field_info::POINTER: case struct_field_info::POINTER:
@ -706,6 +707,20 @@ static type_identity *find_primitive_field(lua_State *state, int field, const ch
*/ */
static int meta_primitive_index(lua_State *state) static int meta_primitive_index(lua_State *state)
{ {
if (lua_type(state, -1) == LUA_TSTRING)
{
const char *attr = lua_tostring(state, -1);
if (strcmp(attr, "ref_target") == 0) {
const struct_field_info *field_info = get_object_ref_header(state, 1)->field_info;
if (field_info && field_info->extra && field_info->extra->ref_target) {
LookupInTable(state, field_info->extra->ref_target, &DFHACK_TYPEID_TABLE_TOKEN);
} else {
lua_pushnil(state);
}
return 1;
}
}
uint8_t *ptr = get_object_addr(state, 1, 2, "read"); uint8_t *ptr = get_object_addr(state, 1, 2, "read");
auto type = find_primitive_field(state, 2, "read", &ptr); auto type = find_primitive_field(state, 2, "read", &ptr);
if (!type) if (!type)
@ -1304,6 +1319,8 @@ static void MakePrimitiveMetatable(lua_State *state, type_identity *type)
{ {
EnableMetaField(state, base+2, "value", type); EnableMetaField(state, base+2, "value", type);
AssociateId(state, base+3, 1, "value"); AssociateId(state, base+3, 1, "value");
EnableMetaField(state, base+2, "ref_target", NULL);
} }
// Add the iteration metamethods // Add the iteration metamethods
@ -1422,6 +1439,28 @@ void struct_identity::build_metatable(lua_State *state)
SetPtrMethods(state, base+1, base+2); SetPtrMethods(state, base+1, base+2);
} }
void other_vectors_identity::build_metatable(lua_State *state)
{
int base = lua_gettop(state);
MakeFieldMetatable(state, this, meta_struct_index, meta_struct_newindex);
EnableMetaField(state, base+2, "_enum");
LookupInTable(state, index_enum, &DFHACK_TYPEID_TABLE_TOKEN);
lua_setfield(state, base+1, "_enum");
auto keys = &index_enum->getKeys()[-index_enum->getFirstItem()];
for (int64_t i = 0; i <= index_enum->getLastItem(); i++)
{
lua_getfield(state, base+2, keys[i]);
lua_rawseti(state, base+2, int(i));
}
SetStructMethod(state, base+1, base+2, meta_struct_field_reference, "_field");
SetPtrMethods(state, base+1, base+2);
}
void global_identity::build_metatable(lua_State *state) void global_identity::build_metatable(lua_State *state)
{ {
int base = lua_gettop(state); int base = lua_gettop(state);

@ -170,18 +170,24 @@ void LuaWrapper::push_object_ref(lua_State *state, void *ptr)
// stack: [metatable] // stack: [metatable]
auto ref = (DFRefHeader*)lua_newuserdata(state, sizeof(DFRefHeader)); auto ref = (DFRefHeader*)lua_newuserdata(state, sizeof(DFRefHeader));
ref->ptr = ptr; ref->ptr = ptr;
ref->field_info = NULL;
lua_swap(state); lua_swap(state);
lua_setmetatable(state, -2); lua_setmetatable(state, -2);
// stack: [userdata] // stack: [userdata]
} }
void *LuaWrapper::get_object_ref(lua_State *state, int val_index) DFRefHeader *LuaWrapper::get_object_ref_header(lua_State *state, int val_index)
{ {
assert(!lua_islightuserdata(state, val_index)); assert(!lua_islightuserdata(state, val_index));
auto ref = (DFRefHeader*)lua_touserdata(state, val_index); auto ref = (DFRefHeader*)lua_touserdata(state, val_index);
return ref->ptr; return ref;
}
void *LuaWrapper::get_object_ref(lua_State *state, int val_index)
{
return get_object_ref_header(state, val_index)->ptr;
} }
/** /**

@ -128,6 +128,46 @@ std::string toLower(const std::string &str)
return rv; return rv;
} }
static const char *normalized_table[256] = {
//.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 0.
NULL, NULL, NULL, NULL, NULL, "S", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 1.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 2.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 3.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 4.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 5.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 6.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 7.
"C", "u", "e", "a", "a", "a", "a", "c", "e", "e", "e", "i", "i", "i", "A", "A", // 8.
"E", "ae", "Ae", "o", "o", "o", "u", "u", "y", "O", "U", "c", "L", "Y", NULL, "f", // 9.
"a", "i", "o", "u", "n", "N", "a", "o", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // A.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // B.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // C.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // D.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // E.
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // F.
};
std::string to_search_normalized(const std::string &str)
{
std::string result;
result.reserve(str.size());
for (char c : str)
{
const char *mapped = normalized_table[(uint8_t)c];
if (mapped == NULL)
result += tolower(c);
else
while (*mapped != '\0')
{
result += tolower(*mapped);
++mapped;
}
}
return result;
}
bool word_wrap(std::vector<std::string> *out, const std::string &str, size_t line_length) bool word_wrap(std::vector<std::string> *out, const std::string &str, size_t line_length)
{ {
out->clear(); out->clear();

@ -313,8 +313,12 @@ bool Plugin::load(color_ostream &con)
if (plug_git_desc_ptr) if (plug_git_desc_ptr)
{ {
if (strcmp(dfhack_git_desc, plug_git_desc) != 0) if (strcmp(dfhack_git_desc, plug_git_desc) != 0)
con.printerr("Warning: Plugin %s compiled for DFHack %s, running DFHack %s\n", {
std::string msg = stl_sprintf("Warning: Plugin %s compiled for DFHack %s, running DFHack %s\n",
*plug_name, plug_git_desc, dfhack_git_desc); *plug_name, plug_git_desc, dfhack_git_desc);
con << msg << flush;
cerr << msg << flush;
}
} }
else else
con.printerr("Warning: Plugin %s missing git information\n", *plug_name); con.printerr("Warning: Plugin %s missing git information\n", *plug_name);

@ -0,0 +1,9 @@
#include "PluginStatics.h"
namespace DFHack {
// xlsxreader statics
DFHACK_EXPORT xlsx_file_handle_identity xlsx_file_handle::_identity;
DFHACK_EXPORT xlsx_sheet_handle_identity xlsx_sheet_handle::_identity;
}

@ -22,28 +22,28 @@ must not be misrepresented as being the original software.
distribution. distribution.
*/ */
#include "Internal.h" #include <cstdio>
#include <cstring>
#include <dirent.h> #include <dirent.h>
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <map>
#include <set>
#include <string>
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/time.h> #include <sys/time.h>
#include <unistd.h>
#include <string>
#include <vector> #include <vector>
#include <map>
#include <set>
#include <cstdio>
#include <cstring>
using namespace std;
#include <md5wrapper.h> #include "Error.h"
#include "Internal.h"
#include "md5wrapper.h"
#include "MemAccess.h" #include "MemAccess.h"
#include "Memory.h" #include "Memory.h"
#include "VersionInfoFactory.h" #include "modules/Filesystem.h"
#include "VersionInfo.h" #include "VersionInfo.h"
#include "Error.h" #include "VersionInfoFactory.h"
#include <string.h>
using namespace std;
using namespace DFHack; using namespace DFHack;
Process::Process(const VersionInfoFactory& known_versions) : identified(false), my_pe(0) Process::Process(const VersionInfoFactory& known_versions) : identified(false), my_pe(0)
@ -180,12 +180,7 @@ uint32_t Process::getTickCount()
string Process::getPath() string Process::getPath()
{ {
const char * cwd_name = "/proc/self/cwd"; return Filesystem::get_initial_cwd();
char target_name[1024];
int target_result;
target_result = readlink(cwd_name, target_name, sizeof(target_name));
target_name[target_result] = '\0';
return(string(target_name));
} }
int Process::getPID() int Process::getPID()

@ -568,4 +568,16 @@ namespace DFHack
root->next = link; root->next = link;
} }
}; };
template<typename T, typename O, typename I>
struct DfOtherVectors
{
std::vector<I *> & operator[](O other_id)
{
CHECK_INVALID_ARGUMENT(size_t(other_id) < sizeof(T) / sizeof(std::vector<I *>));
auto vectors = reinterpret_cast<std::vector<I *> *>(this);
return vectors[other_id];
}
};
} }

@ -334,6 +334,23 @@ namespace DFHack
virtual identity_type type() { return IDTYPE_UNION; } virtual identity_type type() { return IDTYPE_UNION; }
}; };
class DFHACK_EXPORT other_vectors_identity : public struct_identity {
enum_identity *index_enum;
public:
other_vectors_identity(size_t size, TAllocateFn alloc,
compound_identity *scope_parent, const char *dfhack_name,
struct_identity *parent, const struct_field_info *fields,
enum_identity *index_enum) :
struct_identity(size, alloc, scope_parent, dfhack_name, parent, fields),
index_enum(index_enum)
{}
enum_identity *getIndexEnum() { return index_enum; }
virtual void build_metatable(lua_State *state);
};
#ifdef _MSC_VER #ifdef _MSC_VER
typedef void *virtual_ptr; typedef void *virtual_ptr;
#else #else
@ -465,6 +482,7 @@ namespace df
using DFHack::global_identity; using DFHack::global_identity;
using DFHack::struct_identity; using DFHack::struct_identity;
using DFHack::union_identity; using DFHack::union_identity;
using DFHack::other_vectors_identity;
using DFHack::struct_field_info; using DFHack::struct_field_info;
using DFHack::struct_field_info_extra; using DFHack::struct_field_info_extra;
using DFHack::bitfield_item_info; using DFHack::bitfield_item_info;
@ -474,6 +492,7 @@ namespace df
using DFHack::BitArray; using DFHack::BitArray;
using DFHack::DfArray; using DFHack::DfArray;
using DFHack::DfLinkedList; using DFHack::DfLinkedList;
using DFHack::DfOtherVectors;
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor" #pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor"

@ -126,6 +126,7 @@ namespace LuaWrapper {
*/ */
struct DFRefHeader { struct DFRefHeader {
void *ptr; void *ptr;
const struct_field_info *field_info;
}; };
/** /**
@ -133,15 +134,7 @@ namespace LuaWrapper {
*/ */
void push_object_ref(lua_State *state, void *ptr); void push_object_ref(lua_State *state, void *ptr);
DFHACK_EXPORT void *get_object_ref(lua_State *state, int val_index); DFHACK_EXPORT void *get_object_ref(lua_State *state, int val_index);
DFHACK_EXPORT DFRefHeader *get_object_ref_header(lua_State *state, int val_index);
/*
* The system might be extended to carry some simple
* objects inline inside the reference buffer.
*/
inline bool is_self_contained(DFRefHeader *ptr) {
void **pp = &ptr->ptr;
return **(void****)pp == (pp + 1);
}
/** /**
* Report an error while accessing a field (index = field name). * Report an error while accessing a field (index = field name).

@ -366,6 +366,7 @@ DFHACK_EXPORT std::string join_strings(const std::string &separator, const std::
DFHACK_EXPORT std::string toUpper(const std::string &str); DFHACK_EXPORT std::string toUpper(const std::string &str);
DFHACK_EXPORT std::string toLower(const std::string &str); DFHACK_EXPORT std::string toLower(const std::string &str);
DFHACK_EXPORT std::string to_search_normalized(const std::string &str);
DFHACK_EXPORT bool word_wrap(std::vector<std::string> *out, DFHACK_EXPORT bool word_wrap(std::vector<std::string> *out,
const std::string &str, const std::string &str,

@ -0,0 +1,42 @@
/*
* This file and the companion PluginStatics.cpp contain static structures used
* by DFHack plugins. Linking them here, into the dfhack library, instead of
* into the plugins themselves allows the plugins to be freely unloaded and
* reloaded without fear of causing cached references to static data becoming
* corrupted.
*/
#pragma once
#include <xlsxio_read.h>
#include "DataIdentity.h"
namespace DFHack {
// xlsxreader definitions
struct DFHACK_EXPORT xlsx_file_handle_identity : public compound_identity {
xlsx_file_handle_identity()
:compound_identity(0, nullptr, nullptr, "xlsx_file_handle") {};
DFHack::identity_type type() override { return IDTYPE_OPAQUE; }
};
struct DFHACK_EXPORT xlsx_sheet_handle_identity : public compound_identity {
xlsx_sheet_handle_identity()
:compound_identity(0, nullptr, nullptr, "xlsx_sheet_handle") {};
DFHack::identity_type type() override { return IDTYPE_OPAQUE; }
};
struct DFHACK_EXPORT xlsx_file_handle {
const xlsxioreader handle;
xlsx_file_handle(xlsxioreader handle): handle(handle) {}
static xlsx_file_handle_identity _identity;
};
struct DFHACK_EXPORT xlsx_sheet_handle {
const xlsxioreadersheet handle;
xlsx_sheet_handle(xlsxioreadersheet handle): handle(handle) {}
static xlsx_sheet_handle_identity _identity;
};
}

@ -141,7 +141,9 @@ DFHACK_EXPORT bool getCorrectSize(df::coord2d &size, df::coord2d &center,
*/ */
DFHACK_EXPORT bool checkFreeTiles(df::coord pos, df::coord2d size, DFHACK_EXPORT bool checkFreeTiles(df::coord pos, df::coord2d size,
df::building_extents *ext = NULL, df::building_extents *ext = NULL,
bool create_ext = false, bool allow_occupied = false); bool create_ext = false,
bool allow_occupied = false,
bool allow_wall = false);
/** /**
* Returns the number of tiles included by the extent, or defval. * Returns the number of tiles included by the extent, or defval.

@ -146,9 +146,14 @@ enum _filetype {
namespace DFHack { namespace DFHack {
namespace Filesystem { namespace Filesystem {
DFHACK_EXPORT void init ();
DFHACK_EXPORT bool chdir (std::string path); DFHACK_EXPORT bool chdir (std::string path);
DFHACK_EXPORT std::string getcwd (); DFHACK_EXPORT std::string getcwd ();
DFHACK_EXPORT bool restore_cwd ();
DFHACK_EXPORT std::string get_initial_cwd ();
DFHACK_EXPORT bool mkdir (std::string path); DFHACK_EXPORT bool mkdir (std::string path);
// returns true on success or if directory already exists
DFHACK_EXPORT bool mkdir_recursive (std::string path);
DFHACK_EXPORT bool rmdir (std::string path); DFHACK_EXPORT bool rmdir (std::string path);
DFHACK_EXPORT bool stat (std::string path, STAT_STRUCT &info); DFHACK_EXPORT bool stat (std::string path, STAT_STRUCT &info);
DFHACK_EXPORT bool exists (std::string path); DFHACK_EXPORT bool exists (std::string path);
@ -159,7 +164,9 @@ namespace DFHack {
DFHACK_EXPORT int64_t ctime (std::string path); DFHACK_EXPORT int64_t ctime (std::string path);
DFHACK_EXPORT int64_t mtime (std::string path); DFHACK_EXPORT int64_t mtime (std::string path);
DFHACK_EXPORT int listdir (std::string dir, std::vector<std::string> &files); DFHACK_EXPORT int listdir (std::string dir, std::vector<std::string> &files);
// set include_prefix to false to prevent dir from being prepended to
// paths returned in files
DFHACK_EXPORT int listdir_recursive (std::string dir, std::map<std::string, bool> &files, DFHACK_EXPORT int listdir_recursive (std::string dir, std::map<std::string, bool> &files,
int depth = 10, std::string prefix = ""); int depth = 10, bool include_prefix = true);
} }
} }

@ -88,7 +88,9 @@ namespace DFHack
bool find(const std::string &token); bool find(const std::string &token);
bool matches(df::job_item_vector_id vec_id); bool matches(df::job_item_vector_id vec_id);
bool matches(const df::job_item &item, MaterialInfo *mat = NULL, bool skip_vector = false); bool matches(const df::job_item &item, MaterialInfo *mat = NULL,
bool skip_vector = false,
df::item_type itype = df::item_type::NONE);
}; };
inline bool operator== (const ItemTypeInfo &a, const ItemTypeInfo &b) { inline bool operator== (const ItemTypeInfo &a, const ItemTypeInfo &b) {
@ -159,6 +161,11 @@ DFHACK_EXPORT df::unit *getHolderUnit(df::item *item);
/// Returns the true position of the item. /// Returns the true position of the item.
DFHACK_EXPORT df::coord getPosition(df::item *item); DFHACK_EXPORT df::coord getPosition(df::item *item);
/// Returns the title of a codex or "tool", either as the codex title or as the title of the
/// first page or writing it has that has a non blank title. An empty string is returned if
/// no title is found (which is the case for everything that isn't a "book").
DFHACK_EXPORT std::string getBookTitle(df::item *item);
/// Returns the description string of the item. /// Returns the description string of the item.
DFHACK_EXPORT std::string getDescription(df::item *item, int type = 0, bool decorate = false); DFHACK_EXPORT std::string getDescription(df::item *item, int type = 0, bool decorate = false);

@ -102,7 +102,9 @@ namespace DFHack
int filter_idx = -1, int insert_idx = -1); int filter_idx = -1, int insert_idx = -1);
DFHACK_EXPORT bool isSuitableItem(df::job_item *item, df::item_type itype, int isubtype); DFHACK_EXPORT bool isSuitableItem(df::job_item *item, df::item_type itype, int isubtype);
DFHACK_EXPORT bool isSuitableMaterial(df::job_item *item, int mat_type, int mat_index); DFHACK_EXPORT bool isSuitableMaterial(df::job_item *item, int mat_type,
int mat_index,
df::item_type itype);
DFHACK_EXPORT std::string getName(df::job *job); DFHACK_EXPORT std::string getName(df::job *job);
} }

@ -136,8 +136,8 @@ namespace DFHack
return findProduct(info.material, name); return findProduct(info.material, name);
} }
std::string getToken(); std::string getToken() const;
std::string toString(uint16_t temp = 10015, bool named = true); std::string toString(uint16_t temp = 10015, bool named = true) const;
bool isAnyCloth(); bool isAnyCloth();
@ -156,7 +156,8 @@ namespace DFHack
bool matches(const df::job_material_category &cat); bool matches(const df::job_material_category &cat);
bool matches(const df::dfhack_material_category &cat); bool matches(const df::dfhack_material_category &cat);
bool matches(const df::job_item &item); bool matches(const df::job_item &item,
df::item_type itype = df::item_type::NONE);
}; };
DFHACK_EXPORT bool parseJobMaterialCategory(df::job_material_category *cat, const std::string &token); DFHACK_EXPORT bool parseJobMaterialCategory(df::job_material_category *cat, const std::string &token);

@ -32,6 +32,7 @@ distribution.
#include "DataDefs.h" #include "DataDefs.h"
#include "df/caste_raw_flags.h" #include "df/caste_raw_flags.h"
#include "df/goal_type.h"
#include "df/job_skill.h" #include "df/job_skill.h"
#include "df/mental_attribute_type.h" #include "df/mental_attribute_type.h"
#include "df/misc_trait_type.h" #include "df/misc_trait_type.h"
@ -180,6 +181,10 @@ DFHACK_EXPORT std::string getCasteProfessionName(int race, int caste, df::profes
DFHACK_EXPORT int8_t getProfessionColor(df::unit *unit, bool ignore_noble = false); DFHACK_EXPORT int8_t getProfessionColor(df::unit *unit, bool ignore_noble = false);
DFHACK_EXPORT int8_t getCasteProfessionColor(int race, int caste, df::profession pid); DFHACK_EXPORT int8_t getCasteProfessionColor(int race, int caste, df::profession pid);
DFHACK_EXPORT df::goal_type getGoalType(df::unit *unit, size_t goalIndex = 0);
DFHACK_EXPORT std::string getGoalName(df::unit *unit, size_t goalIndex = 0);
DFHACK_EXPORT bool isGoalAchieved(df::unit *unit, size_t goalIndex = 0);
DFHACK_EXPORT std::string getSquadName(df::unit *unit); DFHACK_EXPORT std::string getSquadName(df::unit *unit);
DFHACK_EXPORT df::activity_entry *getMainSocialActivity(df::unit *unit); DFHACK_EXPORT df::activity_entry *getMainSocialActivity(df::unit *unit);

@ -73,13 +73,13 @@ local building_inputs = {
{ {
item_type=df.item_type.SMALLGEM, item_type=df.item_type.SMALLGEM,
quantity=3, quantity=3,
vector_id=df.job_item_vector_id.ANY_GENERIC35 vector_id=df.job_item_vector_id.SMALLGEM
} }
}, },
[df.building_type.Well] = { [df.building_type.Well] = {
{ {
item_type=df.item_type.BLOCKS, item_type=df.item_type.BLOCKS,
vector_id=df.job_item_vector_id.ANY_GENERIC35 vector_id=df.job_item_vector_id.BLOCKS
}, },
{ {
name='bucket', name='bucket',
@ -116,7 +116,7 @@ local building_inputs = {
[df.building_type.ScrewPump] = { [df.building_type.ScrewPump] = {
{ {
item_type=df.item_type.BLOCKS, item_type=df.item_type.BLOCKS,
vector_id=df.job_item_vector_id.ANY_GENERIC35 vector_id=df.job_item_vector_id.BLOCKS
}, },
{ {
name='screw', name='screw',
@ -140,10 +140,10 @@ local building_inputs = {
[df.building_type.GrateWall] = { { item_type=df.item_type.GRATE, vector_id=df.job_item_vector_id.GRATE } }, [df.building_type.GrateWall] = { { item_type=df.item_type.GRATE, vector_id=df.job_item_vector_id.GRATE } },
[df.building_type.GrateFloor] = { { item_type=df.item_type.GRATE, vector_id=df.job_item_vector_id.GRATE } }, [df.building_type.GrateFloor] = { { item_type=df.item_type.GRATE, vector_id=df.job_item_vector_id.GRATE } },
[df.building_type.BarsVertical] = { [df.building_type.BarsVertical] = {
{ item_type=df.item_type.BAR, vector_id=df.job_item_vector_id.ANY_GENERIC35 } { item_type=df.item_type.BAR, vector_id=df.job_item_vector_id.BAR }
}, },
[df.building_type.BarsFloor] = { [df.building_type.BarsFloor] = {
{ item_type=df.item_type.BAR, vector_id=df.job_item_vector_id.ANY_GENERIC35 } { item_type=df.item_type.BAR, vector_id=df.job_item_vector_id.BAR }
}, },
[df.building_type.GearAssembly] = { [df.building_type.GearAssembly] = {
{ {
@ -179,6 +179,9 @@ local building_inputs = {
[df.building_type.Slab] = { { item_type=df.item_type.SLAB } }, [df.building_type.Slab] = { { item_type=df.item_type.SLAB } },
[df.building_type.NestBox] = { { has_tool_use=df.tool_uses.NEST_BOX, item_type=df.item_type.TOOL } }, [df.building_type.NestBox] = { { has_tool_use=df.tool_uses.NEST_BOX, item_type=df.item_type.TOOL } },
[df.building_type.Hive] = { { has_tool_use=df.tool_uses.HIVE, item_type=df.item_type.TOOL } }, [df.building_type.Hive] = { { has_tool_use=df.tool_uses.HIVE, item_type=df.item_type.TOOL } },
[df.building_type.OfferingPlace] = { { has_tool_use=df.tool_uses.PLACE_OFFERING, item_type=df.item_type.TOOL } },
[df.building_type.Bookcase] = { { has_tool_use=df.tool_uses.BOOKCASE, item_type=df.item_type.TOOL } },
[df.building_type.DisplayFurniture] = { { has_tool_use=df.tool_uses.DISPLAY_OBJECT, item_type=df.item_type.TOOL } },
[df.building_type.Rollers] = { [df.building_type.Rollers] = {
{ {
name='mechanism', name='mechanism',
@ -248,7 +251,7 @@ local workshop_inputs = {
[df.workshop_type.Ashery] = { [df.workshop_type.Ashery] = {
{ {
item_type=df.item_type.BLOCKS, item_type=df.item_type.BLOCKS,
vector_id=df.job_item_vector_id.ANY_GENERIC35 vector_id=df.job_item_vector_id.BLOCKS
}, },
{ {
name='barrel', name='barrel',

@ -355,15 +355,15 @@ function Painter:string(text,pen,...)
return self:advance(#text, nil) return self:advance(#text, nil)
end end
function Painter:key(code,pen,...) function Painter:key(keycode,pen,...)
return self:string( return self:string(
getKeyDisplay(code), getKeyDisplay(keycode),
to_pen(self.cur_key_pen, pen, ...) to_pen(self.cur_key_pen, pen, ...)
) )
end end
function Painter:key_string(code, text, ...) function Painter:key_string(keycode, text, ...)
return self:key(code):string(': '):string(text, ...) return self:key(keycode):string(': '):string(text, ...)
end end
-------------------------- --------------------------

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