<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
/***
!Metadata:
|''Name:''|ArchivedTimeline|
|''Description:''|Timeline archived monthly.|
|''Version:''|0.7.2|
|''Date:''|Feb 13, 2009|
|''Source:''|http://sourceforge.net/project/showfiles.php?group_id=150646|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.0.11|
|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|

!Syntax:
{{{<<timeline [modified|created [maxentries [dateFormate]]]>>}}}
!Examples:
{{{<<timeline>>}}}
{{{<<timeline created 10>>}}}
{{{<<timeline modified 10 "MMM DD, YYYY">>}}}

!Revision History:
|''Version''|''Date''|''Note''|
|0.8.0|Oct 22, 2009|Used DocumentFragment object for improving the speed of rendering timeline list|
|0.7.2|Feb 13, 2009|Fixed a bug of level break control , reported by Eduard Wagner.|
|0.7.1|Jan 25, 2009|Corrected the link format of the list of tiddlers within achived timeline if the title of them included the character "''|''", reported by Eduard Wagner.|
|0.7.0|Jul 25, 2007|Accept a date format parameter|
|0.6.3|Jan 14, 2007|Cleaned codes, Removed config.macros.timeline.slider and config.macros.timeline.onClickSlider|
|0.6.2|Dec 10, 2006|Add monthFormat to display month format for Chinese|
|0.6.1|Aug 12, 2006|A great effect on config.macros.timeline.slider for Firefox, thanks Bob McElrath|
|0.6.0|Jul 25, 2006|Runs compatibly with TW 2.1.0 (rev #403+)|
|0.5.2|Jun 21, 2006|Fixed bugs for dateFormat of TW 2.1|
|~|~|Change default dateFormat to "0DD MMM, YYYY"|
|0.5.1|Jun 04, 2006|Added config.macros.archivedTimeline.orderBy for localization|
|0.5.0|Apr 19, 2006|Fixed bug for twice records of the same date ()|
|~|~|Added Date.prototype.convertToLocalYYYYMMDDHHMM<br />in order to backward compatible with 2.0.6-|
|0.4.0|Apr 03, 2006|Added new parameter, {{{<<timeline [sortfield] [maxentries]>>}}}|
|~|~|Added config.options.txtTimelineMaxentries|
|0.3.1|Feb 04, 2006|JSLint checked|
|0.3.0|Feb 04, 2006|Fixed several missing variable declarations|
|0.2.0|Dec 26, 2005|changed for the new feature of Macro timeline of TW 2.0.0 beta 6|
|0.1.0|Nov 3, 2005|Initial release|

!Code section:
***/
//{{{
config.options.txtTimelineMaxentries=0;
config.macros.archivedTimeline = {
	tooltips: "Arkiver sorteret efter  ",
	orderBy:{modified: "ændret", created: "oprettet"},
	monthFormat: "0DD MMM YYYY",
	dateFormat: "0DD MMM YYYY"
};
config.macros.timeline = config.macros.archivedTimeline;

config.macros.timeline.handler = function(place,macroName,params) {
	var field = params[0] ? params[0] : "modified";
	var buffer = document.createDocumentFragment();
	buffer.appendChild(document.createTextNode(this.tooltips + this.orderBy[field]));
	var tiddlers = store.reverseLookup("tags","excludeLists",false,field);
	var lastMonth = null;	var lastDay = null;	var theText = "----\n"; 
	var i = 0;
	var last = (params[1])?params[1]:config.options.txtTimelineMaxentries;
		last = (isNaN(last)||last<1) ? 0:tiddlers.length-Math.min(tiddlers.length,parseInt(last));
	var dateFormat = params[2] ? params[2] : this.dateFormat;
	var cookie, archives, panel;
	for (var t=tiddlers.length-1; t>=last; t--) {
		var tiddler = tiddlers[t];
		var theMonth = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,6);
		var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);

		if(theMonth != lastMonth || i == 0) {
			lastMonth = theMonth;
			buffer.appendChild(document.createElement('hr'));
			cookie = 'chktimeline'+(i++);
			archives = this.formatString(this.monthFormat, lastMonth);
			panel = config.macros.slider.createSlider(buffer,cookie,archives,this.tooltips + archives);
		}
		if(theDay != lastDay){
			var ul = document.createElement("ul");
			panel.appendChild(ul);
			createTiddlyElement(ul,"li",null,"listTitle",tiddler[field].formatString(dateFormat));
			lastDay = theDay; 
		}
		createTiddlyElement(ul,"li",null,"listLink").appendChild(createTiddlyLink(buffer,tiddler.title,true));
	}
	buffer.appendChild(document.createElement('hr'));
	place.appendChild(buffer);
};

config.macros.timeline.formatString = function(template, yyyymm)
{
	var dateString = new Date(yyyymm.substr(0,4)+'/'+yyyymm.substr(4,2)+'/01');
	template = template.replace(/DDD|0DD|DD/g,'');
	return dateString.formatString(template);
};
if (!Date.prototype.convertToLocalYYYYMMDDHHMM){
	Date.prototype.convertToLocalYYYYMMDDHHMM = function(){
		return(String.zeroPad(this.getFullYear(),4) + String.zeroPad(this.getMonth()+1,2) + String.zeroPad(this.getDate(),2) + String.zeroPad(this.getHours(),2) + String.zeroPad(this.getMinutes(),2));
	}
}
//}}}
text/plain
.txt .text .js .vbs .asp .cgi .pl
----
text/html
.htm .html .hta .htx .mht
----
text/comma-separated-values
.csv
----
text/javascript
.js
----
text/css
.css
----
text/xml
.xml .xsl .xslt
----
image/gif
.gif
----
image/jpeg
.jpg .jpe .jpeg
----
image/png
.png
----
image/bmp
.bmp
----
image/tiff
.tif .tiff
----
audio/basic
.au .snd
----
audio/wav
.wav
----
audio/x-pn-realaudio
.ra .rm .ram
----
audio/x-midi
.mid .midi
----
audio/mp3
.mp3
----
audio/m3u
.m3u
----
video/x-ms-asf
.asf
----
video/avi
.avi
----
video/mpeg
.mpg .mpeg
----
video/quicktime
.qt .mov .qtvr
----
application/pdf
.pdf
----
application/rtf
.rtf
----
application/postscript
.ai .eps .ps
----
application/wordperfect
.wpd
----
application/mswrite
.wri
----
application/msexcel
.xls .xls3 .xls4 .xls5 .xlw
----
application/msword
.doc
----
application/mspowerpoint
.ppt .pps
----
application/x-director
.swa
----
application/x-shockwave-flash
.swf
----
application/x-zip-compressed
.zip
----
application/x-gzip
.gz
----
application/x-rar-compressed
.rar
----
application/octet-stream
.com .exe .dll .ocx
----
application/java-archive
.jar
/***
|Name|AttachFilePluginFormatters|
|Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
|Version|4.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Description|run-time library for displaying attachment tiddlers|
Runtime processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]].   Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server.  Note: after creating new attachment tiddlers, you can remove [[AttachFilePlugin]], as long as you retain //this// tiddler (so that images can be rendered later on).
!!!!!Formatters
<<<
This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
* embedded images: {{{[img[tooltip|image]]}}}
* linked embedded images: {{{[img[tooltip|image][link]]}}}
* external/"pretty" links: {{{[[label|link]]}}}
''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
<<<
!!!!!Revisions
<<<
2009.10.10 [4.0.1] in fileExists(), check for IE to avoid hanging Chrome during startup
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly.  This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePluginFormatters= {major: 4, minor: 0, revision: 1, date: new Date(2009,10,10)};
//}}}

//{{{
if (config.macros.attach==undefined) config.macros.attach= { };
//}}}
//{{{
if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
	var tiddler = store.getTiddler(title);
	if (tiddler==undefined || tiddler.tags==undefined) return false;
	return (tiddler.tags.indexOf("attachment")!=-1);
}
//}}}

//{{{
// test for local file existence - returns true/false without visible error display
if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(f) {
	if(window.Components) { // MOZ
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { return false; } // security access denied
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(f); }
		catch(e) { return false; } // invalid directory
		return file.exists();
	}
	else if (config.browser.isIE) { // IE
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		return fso.FileExists(f);
	}
	else return true; // other browsers: assume file exists
}
//}}}

//{{{
if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {

	// extract embedded data, local and remote links (if any)
	var text=store.getTiddlerText(title,'');
	var embedded=store.getTiddlerText(title+'##data','').trim();
	var locallink=store.getTiddlerText(title+'##file','').trim();
	var remotelink=store.getTiddlerText(title+'##url','').trim();

	// backward-compatibility for older attachments (pre 4.0.0)
	var startmarker="---BEGIN_DATA---\n";
	var endmarker="\n---END_DATA---";
	var pos=0; var endpos=0;
	if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
		embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
	if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
		locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
	if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
		remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));

	// if there is a data: URI defined (not supported by IE)
	if (embedded.length && !config.browser.isIE) return embedded;

	// document is being served remotely... use remote URL (if any)  (avoids security alert)
	if (remotelink.length && document.location.protocol!="file:")
		return remotelink;  

	// local link only... return link without checking file existence (avoids security alert)
	if (locallink.length && !remotelink.length) 
		return locallink; 

	// local link, check for file exist... use local link if found
	if (locallink.length) { 
		locallink=locallink.replace(/^\.[\/\\]/,''); // strip leading './' or '.\' (if any)
		if (this.fileExists(getLocalPath(locallink))) return locallink;
		// maybe local link is relative... add path from current document and try again
		var pathPrefix=document.location.href;  // get current document path and trim off filename
		var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\"); 
		if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
		if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
	}

	// no embedded data, no local (or not found), fallback to remote URL (if any)
	if (remotelink.length) return remotelink;

	// attachment URL doesn't resolve, just return input as is
	return title;
}
//}}}
//{{{
if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
	if (this.initialized) return;

	// find the formatter for "image" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
			{
			var e = w.output;
			if(lookaheadMatch[5])
				{
				var link = lookaheadMatch[5];
				// ELS -------------
				var external=config.formatterHelpers.isExternalLink(link);
				if (external)
					{
					if (config.macros.attach.isAttachment(link))
						{
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title = config.macros.attach.linkTooltip + link;
						}
					else
						e = createExternalLink(w.output,link);
					}
				else 
					e = createTiddlyLink(w.output,link,false,null,w.isStatic);
				// ELS -------------
				addClass(e,"imageLink");
				}
			var img = createTiddlyElement(e,"img");
			if(lookaheadMatch[1])
				img.align = "left";
			else if(lookaheadMatch[2])
				img.align = "right";
			if(lookaheadMatch[3])
				img.title = lookaheadMatch[3];
			img.src = lookaheadMatch[4];
			// ELS -------------
			if (config.macros.attach.isAttachment(lookaheadMatch[4]))
				img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
			// ELS -------------
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
//}}}
//{{{
	// find the formatter for "prettyLink" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
	if (i<config.formatters.length)	{
		config.formatters[i].handler=function(w) {
			this.lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
				var e;
				var text = lookaheadMatch[1];
				if(lookaheadMatch[3]) {
					// Pretty bracketted link
					var link = lookaheadMatch[3];
					if (config.macros.attach.isAttachment(link)) {
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title=config.macros.attach.linkTooltip+link;
					}
					else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
						? createExternalLink(w.output,link)
						: createTiddlyLink(w.output,link,false,null,w.isStatic);
				} else {
					e = createTiddlyLink(w.output,text,false,null,w.isStatic);
				}
				createTiddlyText(e,text);
				w.nextMatch = this.lookaheadRegExp.lastIndex;
			}
		}
	} // if "prettyLink" formatter found
	this.initialized=true;
}
//}}}
//{{{
config.macros.attach.init_formatters(); // load time init
//}}}
//{{{
if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
	TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
	TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
		return config.macros.attach.isAttachment(title)?
			config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
	}
}
//}}}
/***
|''Name:''|BackstageSidebarPlugin|
|''Description:''|Moves the sidebar to the backstage, as suggested at http://www.tiddlywiki.org/wiki/Dev:Backstage#Customization|
|''Author''|JonathanLister|
|''CodeRepository:''|n/a |
|''Version:''|0.1|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''License''|[[BSD License|http://www.opensource.org/licenses/bsd-license.php]] |
|''~CoreVersion:''|2.4|

***/

//{{{
if(!version.extensions.BackstageSidebarPlugin) {
version.extensions.BackstageSidebarPlugin = {installed:true};

config.tasks.sidebar = {
	text: "sidebar",
	tooltip: "sidebar options",
	content: "<<tiddler SideBarOptions>><<tiddler SideBarTabs>>"
};
config.backstageTasks.push("sidebar");

config.macros.BackstageSidebarPlugin = {
	tiddler:tiddler
};

config.macros.BackstageSidebarPlugin.init = function() {
	var tiddler = this.tiddler;
	setStylesheet(store.getTiddlerText(tiddler.title+'##Stylesheet'),'BackstageSidebarPlugin');
};

} //# end of 'install only once'
//}}}
!usage
{{{[img[BlackCat.gif]]}}}
[img[BlackCat.gif]]
!notes
//none//
!type
image/gif
!file
file:////mnt/home/Dropbox/Dropbox/Public/Black_Cat_Animation.gif
!url
http://dl.dropbox.com/u/15835063/Black_Cat_Animation.gif
!data
data:image/gif;base64,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
Background: #fff
Foreground: #000
PrimaryPale: #ddaa99
PrimaryLight: #552233
PrimaryMid: #552233
PrimaryDark: #014
SecondaryPale: #994444
SecondaryLight: #994444
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #ffeedd
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #0078a5
PrimaryDark: #014
SecondaryPale: #ededed
SecondaryLight: #f16c7c
SecondaryMid: #00adee
SecondaryDark: #bf404f
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Grey: #e9e9e9
/*}}}*/
/*{{{*/
Background: #ddf0f7
Foreground: #071a21
PrimaryPale: #e8f5fa
PrimaryLight: #8fcfe7
PrimaryMid: #36aad4
PrimaryDark: #092129
SecondaryPale: #effae8
SecondaryLight: #afe78f
SecondaryMid: #70d436
SecondaryDark: #152909
TertiaryPale: #f8e8fa
TertiaryLight: #de8fe7
TertiaryMid: #c436d4
TertiaryDark: #260929
Error: #f88
ColorPaletteParameters: HSL([196|82], [0.6463700151070952],[0.1|0.9469053440261632])
/*}}}*/
/%
!info
|Name|CycleThemes|
|Source|http://www.TiddlyTools.com/#CycleThemes|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|creates command link to cycle through systemThemes|
Usage
<<<
{{{
<<tiddler CycleThemes>>
<<tiddler CycleThemes with: label "theme theme theme">>
}}}
*''label'' (optional)<br>text of command link. default='next theme'
*''"theme theme theme"'' (optional)<br>list of theme tiddlers to cycle through.   default=[[StyleSheet]] plus all tiddlers tagged with<<tag systemTheme>>, except those tagged with<<tag excludeTheme>>or<<tag excludeLists>>
<<<
Examples
<<<
*Cycle through all themes:<br>{{{<<tiddler CycleThemes>>}}}<br><<tiddler CycleThemes##show with: 'next theme' >>
*Toggle between two themes:<br>{{{<<tiddler CycleThemes with: "toggle" "StyleSheet Plain">>}}}<br><<tiddler CycleThemes##show with: "toggle" "StyleSheet Plain">>
*Apply a theme:<br>{{{<<tiddler CycleThemes with: "default" StyleSheet>>}}}<br><<tiddler CycleThemes##show with: "use default StyleSheet" StyleSheet>>
<<<
!end
!show
<html><nowiki><a href="javascript:;"
onmouseover="
	this.title='current theme: '+config.options.txtTheme;
	this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
	+encodeURIComponent(encodeURIComponent(this.onclick))
	+')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
	var titles='$2'.readBracketedList();
	if ('$2'=='$'+'2') {
		var tids=store.getTaggedTiddlers('systemTheme');
		titles=tids.map(function(t){return t.tags.contains('excludeTheme','excludeLists')?null:t.title;});
		titles.pushUnique('StyleSheet');
	}
	var curr=titles.indexOf(config.options.txtTheme);
	var next=curr+1>=titles.length?0:curr+1;
	while(!titles[next] && next!=curr) next=next+1>=titles.length?0:next+1;
	story.switchTheme(titles[next]);
	return false;"
>$1</a></html>
!end
%/<<tiddler {{var src='CycleThemes'; src+(tiddler&&tiddler.title==src?'##info':'##show')}}
	with: {{'$1'=='$'+'1'?'next theme':'$1'}} "$2">>
/***
|''Navn:''|DanishTranslation|
|''Beskrivelse:''|Translation of TiddlyWiki into Danish|
|''Forfatter:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''Kilde:''|www.example.com |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/locales/core/en/locale.en.js |
|''Version:''|0.3.7|
|''Dato:''|Jul 6, 2007|
|''Kommentarer:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''Licens:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.4|
***/

//{{{
//--
//-- Translateable strings
//--

// Strings in "double quotes" should be translated; strings in 'single quotes' should be left alone

config.locale = "da"; // W3C language tag

if (config.options.txtUserName == 'YourName') // do not translate this line, but do translate the next line
	merge(config.options,{txtUserName: "DitNavn"});

merge(config.tasks,{
	save: {text: "gem", tooltip: "Gem dine ændringer til denne TiddlyWiki", action: saveChanges},
	sync: {text: "synk", tooltip: "Synkronisér ændringer med andre TiddlyWiki filer og servere", content: '<<sync>>'},
	importTask: {text: "importér", tooltip: "Importér tiddlers og plugins fra andre TiddlyWiki filer og servere", content: '<<importTiddlers>>'},
	tweak: {text: "Tilpas", tooltip: "Tilpas TiddlyWikis udseende og opførsel", content: '<<options>>'},
	upgrade: {text: "upgradér", tooltip: "Upgrader TiddlyWikis kerne kode", content: '<<upgrade>>'},
	plugins: {text: "udvidelser", tooltip: "Administrér installerede udvidelser", content: '<<plugins>>'}
});

// Options that can be set in the options panel and/or cookies
merge(config.optionsDesc,{
	txtUserName: "Brugernavn til signering af dine ændringer",
	chkRegExpSearch: "Avend almindelige udtryk til søgninger",
	chkCaseSensitiveSearch: "Forskel på store og små bogstaver",
	chkIncrementalSearch: "Bogstav for bogstav-søgning",
	chkAnimate: "Anvend animationer",
	chkSaveBackups: "Gem en backupfil når der gemmes ændringer",
	chkAutoSave: "Gem automatisk ændringer",
	chkGenerateAnRssFeed: "Lav et RSS feed når der gemmes ændringer",
	chkSaveEmptyTemplate: "Lav en tom skabelon når der gemmes ændringer",
	chkOpenInNewWindow: "Åben internet links i et nyt vindue",
	chkToggleLinks: "Når man klikker på et link i åbne tiddlers lukkes de",
	chkHttpReadOnly: "Skjul redigeringsværktøjer når den vises over HTTP",
	chkForceMinorUpdate: "Opdatér ikke brugernavn og dato når tiddlers bliver ændrede",
	chkConfirmDelete: "Bed om bekræftelse før tiddlers slettes",
	chkInsertTabs: "Brug tab tasten til at indsætte tab tegn istedet for at hoppe imellem felter",
	txtBackupFolder: "Navn på mappe til brug for backups",
	txtMaxEditRows: "Maximum antal af rækker i edit bokse",
	txtFileSystemCharSet: "Default tegnsæt til at gemme ændringer (Kun i Firefox/Mozilla)"});

merge(config.messages,{
	customConfigError: "Der opstod problemer ved loading af udvidelser. Se PluginManager for detaljer",
	pluginError: "Fejl: %0",
	pluginDisabled: "Ikke udført fordi det er slået fra via 'systemConfigDisable' tag",
	pluginForced: "Udført fordi det er tvunget via 'systemConfigForce' tag",
	pluginVersionError: "Ikke udført fordi denne udvidelse kræver en nyere udgave af TiddlyWiki",
	nothingSelected: "Intet er valgt. Du er nødt til at vælge en eller flere ting først",
	savedSnapshotError: "Det ser ud som om denne TiddlyWiki er blevet gemt forkert. Se venligst http://www.tiddlywiki.com/#DownloadSoftware for details",
	subtitleUnknown: "(ukendt)",
	undefinedTiddlerToolTip: "Tiddleren '%0' findes ikke endnu",
	shadowedTiddlerToolTip: "Tiddleren '%0' findes ikke endnu, men har en foruddefineret skygge værdi",
	tiddlerLinkTooltip: "%0 - %1, %2",
	externalLinkTooltip: "Internet link til %0",
	noTags: "Der er ingen taggede tiddlere",
	notFileUrlError: "Du er nødt til at gemme denne TiddlyWiki til en fil før du kan gemme ændringer",
	cantSaveError: "Det er ikke muligt at gemme ændringer. Mulige grunde indbefatter:\n- din browser understøtter det ikke (Firefox, Internet Explorer, Safari og Opera virker alle fint hvis de er konfigurerede korrekt)\n- stien til din TiddlyWiki fil indeholder ulovlige tegn\n- TiddlyWiki HTML filen er blevet flyttet eller omdøbt",
	invalidFileError: "Den originale fil '%0' lader ikke til at være en rigtig TiddlyWiki",
	backupSaved: "Backup gemt",
	backupFailed: "Det lykkedes IKKE at gemme en backup fil",
	rssSaved: "RSS feed gemt",
	rssFailed: "Det lykkedes IKKE at gemme et RSS feed",
	emptySaved: "Tom skabelon gemt",
	emptyFailed: "Det lykkedes IKKE at gemme en tom skabelon",
	mainSaved: "Hoved TiddlyWiki fil gemt",
	mainFailed: "Det lykkedes IKKE at gemme hoved TiddlyWiki filen. Dine ændringer er IKKE blevet gemt",
	macroError: "Fejl i makro <<\%0>>",
	macroErrorDetails: "Fejl ved udførsel af makro <<\%0>>:\n%1",
	missingMacro: "Ingen sådan makro",
	overwriteWarning: "En tiddler med navnet '%0' findes allerede. Vælg OK for at overskrive den",
	unsavedChangesWarning: "ADVARSEL! Der er ugemte ændringer i TiddlyWikien\n\nVælg OK for at gemme\nVælg FORTRYD for at afvise",
	confirmExit: "--------------------------------\n\nDer er ugemte ændringer i TiddlyWikien. Hvis du fortsætter vil du miste disse ændringer\n\n--------------------------------",
	saveInstructions: "GemÆndringer",
	unsupportedTWFormat: "Ikke understøttet TiddlyWiki format '%0'",
	tiddlerSaveError: "Fejl ved forsøg på at gemme tiddler '%0'",
	tiddlerLoadError: "Fejl ved load af tiddler '%0'",
	wrongSaveFormat: "Kan ikke gemme med formatet '%0'. Bruger standard format til at gemme.",
	invalidFieldName: "Ikke tilladt feltnavn %0",
	fieldCannotBeChanged: "Felt '%0' kan ikke ændres",
	loadingMissingTiddler: "Forsøger at hente tiddleren '%0' fra '%1' serveren ved:\n\n'%2' i arbejdsområdet '%3'",
	upgradeDone: "Opgradering til version %0 er nu fuldført\n\nKlik 'OK' for at genopfriske den nyligt opgraderede TiddlyWiki"});

merge(config.messages.messageClose,{
	text: "luk",
	tooltip: "luk dette meddelelsesområde"});

config.messages.backstage = {
	open: {text: "bagscenen", tooltip: "Åben bagsceneområdet for at ændre på nogle grundlæggende indstillinger"},
	close: {text: "luk", tooltip: "Luk bagsceneområdet"},
	prompt: "bagscenen: ",
	decal: {
		edit: {text: "edit", tooltip: "Redigér tiddleren '%0'"}
	}
};

config.messages.listView = {
	tiddlerTooltip: "Klik for at se hele denne tiddlers tekst",
	previewUnavailable: "(forhåndsvisning er ikke tilgængelig)"
};

config.messages.dates.months = ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November","December"];
config.messages.dates.days = ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"];
config.messages.dates.shortMonths = ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"];
config.messages.dates.shortDays = ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"];
// suffixes for dates, eg "1ste","2den","3die"..."30te","31te"
config.messages.dates.daySuffixes = ["ste","den","die","te","te","te","te","te","te","te",
		"te","te","te","te","te","te","te","te","te","te",
		"ste","den","die","te","te","te","te","te","te","te",
		"te"];
config.messages.dates.am = "formiddag";
config.messages.dates.pm = "eftermiddag";

merge(config.messages.tiddlerPopup,{
	});

merge(config.views.wikified.tag,{
	labelNoTags: "ingen tags",
	labelTags: "tags: ",
	openTag: "Åben tag '%0'",
	tooltip: "Vis tiddlere der er taggede med '%0'",
	openAllText: "Åben alle",
	openAllTooltip: "Åben alle disse tiddlere",
	popupNone: "Ingen andre tiddlere er taggede med '%0'"});

merge(config.views.wikified,{
	defaultText: "Tiddleren '%0' findes ikke endnu. Dobbelt-klik for at lave den",
	defaultModifier: "(mangler)",
	shadowModifier: "(indbygget skygge tiddler)",
	dateFormat: "DD MMM YYYY", // use this to change the date format for your locale, eg "YYYY MMM DD", do not translate the Y, M or D
	createdPrompt: "lavet"});

merge(config.views.editor,{
	tagPrompt: "Skriv tags delt med mellemrum, [[brug 2 dobbelte firkantede klammer]] om nødvendigt, eller tilføj allerede eksisterende",
	defaultText: "Skriv teksten til '%0'"});

merge(config.views.editor.tagChooser,{
	text: "tags",
	tooltip: "Vælg eksisterende tags som tilføjelse til denne tiddler",
	popupNone: "Der er ikke defineret nogen tags",
	tagTooltip: "Tilføj tagget '%0'"});

merge(config.messages,{
	sizeTemplates:
		[
		{unit: 1024*1024*1024, template: "%0\u00a0GB"},
		{unit: 1024*1024, template: "%0\u00a0MB"},
		{unit: 1024, template: "%0\u00a0KB"},
		{unit: 1, template: "%0\u00a0B"}
		]});

merge(config.macros.search,{
	label: "søg",
	prompt: "Søg i denne TiddlyWiki",
	accessKey: "F",
	successMsg: "Der er fundet %0 tiddlere som matcher %1",
	failureMsg: "Der er ikke fundet nogen tiddlere som matcher %0"});

merge(config.macros.tagging,{
	label: "tagger: ",
	labelNotTag: "tagger ikke",
	tooltip: "Liste over tiddlere der er taggede med '%0'"});

merge(config.macros.timeline,{
	dateFormat: "DD MMM YYYY"});// use this to change the date format for your locale, eg "YYYY MMM DD", do not translate the Y, M or D

merge(config.macros.allTags,{
	tooltip: "Vis tiddlere der er taggede med '%0'",
	noTags: "Der er ingen taggede tiddlere"});

config.macros.list.all.prompt = "Alle tiddlere i alfabetisk orden";
config.macros.list.missing.prompt = "Tiddlere der linkes til men som ikke er definerede";
config.macros.list.orphans.prompt = "Tiddlere som der ikke linkes til fra nogen andre tiddlere";
config.macros.list.shadowed.prompt = "Tiddlere som er skyggede med grundlæggende indhold";
config.macros.list.touched.prompt = "Tiddlere som er blevet ændret lokalt ";

merge(config.macros.closeAll,{
	label: "luk alle",
	prompt: "Luk alle viste tiddlere (untaget dem som er ved at blive redigerede)"});

merge(config.macros.permaview,{
	label: "vis permalink",
	prompt: "Lav et link til en URL som henter alle de netop nu synlige tiddlere"});

merge(config.macros.saveChanges,{
	label: "gem ændringer",
	prompt: "Gem alle tiddlere for at lave en ny TiddlyWiki",
	accessKey: "S"});

merge(config.macros.newTiddler,{
	label: "ny tiddler",
	prompt: "Lav en ny tiddler",
	title: "Ny Tiddler",
	accessKey: "N"});

merge(config.macros.newJournal,{
	label: "ny journal",
	prompt: "Lav en ny tiddler ud fra nuværende dato og tid",
	accessKey: "J"});

merge(config.macros.options,{
	wizardTitle: "Tilpas avancerede muligheder",
	step1Title: "Disse muligheder gemmes i cookies i din browser",
	step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Show unknown options</input>",
	unknownDescription: "//(ukendt)//",
	listViewTemplate: {
		columns: [
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'}
			]}
	});

merge(config.macros.plugins,{
	wizardTitle: "Administrer udvidelser",
	step1Title: "Aktive udvidelser",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	skippedText: "(Denne udvidelse er ikke blevet aktiveret fordi den først er blevet tilføjet efter start)",
	noPluginText: "Der er ikke installeret nogen udvidelser",
	confirmDeleteText: "Er du sikker på at du vil slette disse udvidelser:\n\n%0",
	removeLabel: "Fjern systemConfig tag",
	removePrompt: "Fjern systemConfig tag",
	deleteLabel: "slet",
	deletePrompt: "Slet disse tiddlere permanent",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Size", type: 'Size'},
			{name: 'Forced', field: 'forced', title: "Forced", tag: 'systemConfigForce', type: 'TagCheckbox'},
			{name: 'Disabled', field: 'disabled', title: "Disabled", tag: 'systemConfigDisable', type: 'TagCheckbox'},
			{name: 'Executed', field: 'executed', title: "Loaded", type: 'Boolean', trueText: "Yes", falseText: "No"},
			{name: 'Startup Time', field: 'startupTime', title: "Startup Time", type: 'String'},
			{name: 'Error', field: 'error', title: "Status", type: 'Boolean', trueText: "Error", falseText: "OK"},
			{name: 'Log', field: 'log', title: "Log", type: 'StringList'}
			],
		rowClasses: [
			{className: 'error', field: 'error'},
			{className: 'warning', field: 'warning'}
			]}
	});

merge(config.macros.toolbar,{
	moreLabel: "mere",
	morePrompt: "Vis flere muligheder"
	});

merge(config.macros.refreshDisplay,{
	label: "genopfrisk",
	prompt: "Genopfrisk hele TiddlyWikiens udseende"
	});

merge(config.macros.importTiddlers,{
	readOnlyWarning: "Du kan ikke importere til en låst TiddlyWiki fil. Prøv at åbne den fra en fil:// URL",
	wizardTitle: "Importer tiddlere fra en anden fil eller server",
	step1Title: "Trin 1: Find serveren eller TiddlyWiki filen",
	step1Html: "Vælg servertypen: <select name='selTypes'><option value=''>Choose...</option></select><br>Indskriv webadresse eller sti her: <input type='text' size=50 name='txtPath'><br>...eller søg efter en fil: <input type='file' size=50 name='txtBrowse'><br><hr>...eller vælg et forudbestemt feed: <select name='selFeeds'><option value=''>Vælg...</option></select>",
	openLabel: "åbn",
	openPrompt: "Åbn forbindelsen til denne fil eller server",
	openError: "Der var problemer med at hente tiddlywiki filen",
	statusOpenHost: "Forbinder til hosten",
	statusGetWorkspaceList: "Henter en liste over tilgængelige arbejdsområder",
	step2Title: "Trin 2: Vælg arbejdsområde",
	step2Html: "Indskriv et navn på arbejdsområdet: <input type='text' size=50 name='txtWorkspace'><br>...eller vælg et der allerede er der: <select name='selWorkspace'><option value=''>Choose...</option></select>",
	cancelLabel: "fortryd",
	cancelPrompt: "Fortryd denne import",
	statusOpenWorkspace: "Åben arbejdsområdet",
	statusGetTiddlerList: "Henter listen over tilgængelige tiddlere",
	errorGettingTiddlerList: "Fejl ved hentning af liste over tiddlere, klik Fortryd for at prøve igen",
	step3Title: "Trin 3: Vælg hvilke tiddlere der skal importeres",
	step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>Keep these tiddlers linked to this server so that you can synchronise subsequent changes</input><br><input type='checkbox' name='chkSave'>Save the details of this server in a 'systemServer' tiddler called:</input> <input type='text' size=25 name='txtSaveTiddler'>",
	importLabel: "importer",
	importPrompt: "Importer disse tiddlere",
	confirmOverwriteText: "Er du sikker på at du vil overskrive disse tiddlere:\n\n%0",
	step4Title: "Trin 4: Importerer %0 tiddler(e)",
	step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
	doneLabel: "udført",
	donePrompt: "Luk denne wizard",
	statusDoingImport: "Importerer tiddlere",
	statusDoneImport: "Alle tiddlere er importede",
	systemServerNamePattern: "%2 on %1",
	systemServerNamePatternNoWorkspace: "%1",
	confirmOverwriteSaveTiddler: "Tiddleren '%0' findes allerede. Klik 'OK' for at overskrive den med detaljerne fra denne server, eller 'Fortryd' for at efterlade uændret",
	serverSaveTemplate: "|''Type:''|%0|\n|''URL:''|%1|\n|''Workspace:''|%2|\n\nDenne tiddler blev lavet automatisk for at skrive denne servers detaljer",
	serverSaveModifier: "(System)",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Size", type: 'Size'},
			{name: 'Tags', field: 'tags', title: "Tags", type: 'Tags'}
			],
		rowClasses: [
			]}
	});

merge(config.macros.upgrade,{
	wizardTitle: "Opgrader TiddlyWikis kerne kode",
	step1Title: "Opdater eller reparer denne TiddlyWiki til sidste nye udgivelse",
	step1Html: "Du er ved at opgradere til sidste nye udgave af TiddlyWikis kerne kode (from <a href='%0' class='externalLink' target='_blank'>%1</a>). Dit indhold vil blive bibeholdt under opgraderinen.<br><br>Bemærk at opgraderinger kan konfikte med gamle udvidelser. Hvis du får problemer med den opgraderede fil se her <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
	errorCantUpgrade: "Kan ikke opgradere denne TiddlyWiki. Du kan kun opgradere en TiddlyWiki fil som er gemt lokalt på en pc",
	errorNotSaved: "Du skal gemme ændringer før du kan gennemføre en opgradering",
	step2Title: "Bekræft opgraderingsdetaljer",
	step2Html_downgrade: "Du er ved at nedgradere til TiddlyWiki version %0 fra %1.<br><br>Nedgradering til en ældre udgave af kerne koden er IKKE tilrådeligt",
	step2Html_restore: "Denne tiddlyWike bruger allerede den sidste nye kerne kode (%0).<br><br>Du kan fortsætte med opgraderingen for at sikre dig at koden ikke er blevet ødelagt",
	step2Html_upgrade: "Du er ved at opgradere til TiddlyWiki version %0 fra %1",
	upgradeLabel: "opgrader",
	upgradePrompt: "Forbered opgraderingsprocessen",
	statusPreparingBackup: "Forbereder backup",
	statusSavingBackup: "Gemmer backup fil",
	errorSavingBackup: "Der var problemer med at gemme backup filen",
	statusLoadingCore: "Loader kernekoden",
	errorLoadingCore: "Fejl ved load af kernekoden",
	errorCoreFormat: "Fejl ved den nye kernekode",
	statusSavingCore: "Gemmer den nye kernekode",
	statusReloadingCore: "Genloader den nye kernekode",
	startLabel: "start",
	startPrompt: "Start opgraderingsprocessen",
	cancelLabel: "fortryd",
	cancelPrompt: "Fortryd opgraderingsprocessen",
	step3Title: "Opgradering afbrudt",
	step3Html: "Du har afbrudt opgraderingsprocessen"
	});

merge(config.macros.sync,{
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Server Type', field: 'serverType', title: "Server type", type: 'String'},
			{name: 'Server Host', field: 'serverHost', title: "Server host", type: 'String'},
			{name: 'Server Workspace', field: 'serverWorkspace', title: "Server workspace", type: 'String'},
			{name: 'Status', field: 'status', title: "Synchronisation status", type: 'String'},
			{name: 'Server URL', field: 'serverUrl', title: "Server URL", text: "View", type: 'Link'}
			],
		rowClasses: [
			],
		buttons: [
			{caption: "Synkronisér disse tiddlere", name: 'sync'}
			]},
	wizardTitle: "Synkroniser med internet servere og filer",
	step1Title: "Vælg hvilke tiddlere du vil synkronisere",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	syncLabel: "synk",
	syncPrompt: "Synkronisér disse tiddlere",
	hasChanged: "Ændret imens den var koblet fra",
	hasNotChanged: "Uændret imens den var koblet fra",
	syncStatusList: {
		none: {text: "...", color: "gennemsigtig", display:null},
		changedServer: {text: "Ændret på serveren", color: '#8080ff', display:null},
		changedLocally: {text: "Ændret imens den var koblet fra", color: '#80ff80', display:null},
		changedBoth: {text: "ændret imens den var koblet fra også på serveren", color: '#ff8080', display:null},
		notFound: {text: "Ikke fundet på serveren", color: '#ffff80', display:null},
		putToServer: {text: "Gemt update på serveren", color: '#ff80ff', display:null},
		gotFromServer: {text: "Hentet update fra serveren", color: '#80ffff', display:null}
		}
	});

merge(config.commands.closeTiddler,{
	text: "luk",
	tooltip: "Luk denne tiddler"});

merge(config.commands.closeOthers,{
	text: "luk andre",
	tooltip: "Luk alle andre tiddlere"});

merge(config.commands.editTiddler,{
	text: "redigér",
	tooltip: "Redigér denne tiddler",
	readOnlyText: "se",
	readOnlyTooltip: "Se denne tiddlers kilde"});

merge(config.commands.saveTiddler,{
	text: "færdig",
	tooltip: "Gem ændringer til denne tiddler"});

merge(config.commands.cancelTiddler,{
	text: "fortryd",
	tooltip: "Fortryd ændringer til denne tiddler",
	warning: "Er du sikker på at du vil fortryde dine ændringer til  '%0'?",
	readOnlyText: "færdig",
	readOnlyTooltip: "Se tiddlere normalt"});

merge(config.commands.deleteTiddler,{
	text: "slet",
	tooltip: "Slet denne tiddler",
	warning: "Er du sikker på at du vil slette '%0'?"});

merge(config.commands.permalink,{
	text: "permalink",
	tooltip: "Permalink til denne tiddler"});

merge(config.commands.references,{
	text: "referencer",
	tooltip: "Vis tiddlere som linker til denne tiddler",
	popupNone: "Ingen referencer"});

merge(config.commands.jump,{
	text: "spring",
	tooltip: "Spring til en anden tiddler"});

merge(config.commands.syncing,{
	text: "synkroniserer",
	tooltip: "Kontroller synkronisering af denne tiddler med en server eller en fil",
	currentlySyncing: "<div>Currently syncing via <span class='popupHighlight'>'%0'</span> to:</"+"div><div>host: <span class='popupHighlight'>%1</span></"+"div><div>workspace: <span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
	notCurrentlySyncing: "Sykroniserer ikke lige nu",
	captionUnSync: "Stop synkronisering af denne tiddler",
	chooseServer: "Synkronisér denne tiddler med en anden server:",
	currServerMarker: "\u25cf ",
	notCurrServerMarker: "  "});

merge(config.commands.fields,{
	text: "felter",
	tooltip: "Vis denne tiddlers udvidede felter",
	emptyText: "Der er ingen udvidede felter til rådighed for denne tiddler",
	listViewTemplate: {
		columns: [
			{name: 'Field', field: 'field', title: "Field", type: 'String'},
			{name: 'Value', field: 'value', title: "Value", type: 'String'}
			],
		rowClasses: [
			],
		buttons: [
			]}});

merge(config.shadowTiddlers,{
	DefaultTiddlers: "[[Kom i gang]]",
	MainMenu: "[[Kom i gang]]\n\n\n^^~TiddlyWiki version <<version>>\n© 2007 [[UnaMesa|http://www.unamesa.org/]]^^",
	"Kom i gang": "For at komme i gang med denne tomme tiddlywiki, skal du ændre på de følgende tiddlere:\n* SiteTitle & SiteSubtitle: Sidens titel og undertitel, som vist øverst (efter de er gemt, vil de også vise sig i browserens titelmenu)\n* MainMenu: er hovedmenuen (oftest placeret til venstre)\n* DefaultTiddlers: Indeholder navnene på de tiddlere du vil have skal starte op når du åbner TiddlyWiki\nDu skal også skrive dit brugernavn for at signere dine redigeringer: <<option txtUserName>>",
	SiteTitle: "Min TiddlyWiki",
	SiteSubtitle: "en genbrugelig ikke-liniær personlig web notesbog",
	SiteUrl: "http://www.tiddlywiki.com/",
	OptionsPanel: "Disse muligheder for at ændre på TiddlyWiki bliver gemt i din browser\n\nDit brugernavn til at signere dine ændringer. Skriv det som et WikiOrd (f.eks. PerPoulsen)\n<<option txtUserName>>\n\n<<option chkSaveBackups>> Save backups\n<<option chkAutoSave>> Auto save\n<<option chkRegExpSearch>> Regexp search\n<<option chkCaseSensitiveSearch>> Case sensitive search\n<<option chkAnimate>> Enable animations\n\n----\nSe også [[Avancerede muligheder|AdvancedOptions]]",
	SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "muligheder \u00bb" "TiddlyWikis avancerede muligheder">>',
	SideBarTabs: '<<tabs txtMainTab "Tidslinie" "Tidslinie" TabTimeline "Alle" "Alle tiddlere" TabAll "Tags" "Alle tags" TabTags "Flere" "Flere lister" TabMore>>',
	TabMore: '<<tabs txtMoreTab "Manglende" "Manglende tiddlere" TabMoreMissing "Uden tilknytning" "Tiddlere" TabMoreOrphans "Skyggede" "Skyggede tiddlere" TabMoreShadowed>>'
	});

merge(config.annotations,{
	AdvancedOptions: "Denne skyggetiddler giver adgang til flere avancerede muligheder",
	ColorPalette: "Værdierne i denne skyggetiddler bestemmer hvilket farveskema, der bliver brugt til ~TiddlyWikis brugerflade",
	DefaultTiddlers: "Tiddlere som er listede i denne skyggetiddler vil automatisk blive vist når ~TiddlyWiki starter op",
	EditTemplate: "HTML skabelonen i denne skyggetiddler bestemmer hvordan tiddlere ser ud når de bliver redigerede",
	GettingStarted: "Denne skyggetiddler giver instruktioner om grundlæggende anvendelse",
	ImportTiddlers: "Denne skyggetiddler giver mulighed for at importere tiddlere",
	MainMenu: "Denne tiddler bliver brugt til at definere indholdet af hoved menuen i venstre side af skærmen",
	MarkupPreHead: "Denne tiddler bliver indsat i toppen af <head> sektionen på TiddlyWiki HTML filen",
	MarkupPostHead: "Denne tiddler bliver indsat i bunden af <head> sektionen på TiddlyWiki HTML filen",
	MarkupPreBody: "Denne tiddler bliver indsat i toppen af<body> sektionen på TiddlyWiki HTML filen",
	MarkupPostBody: "Denne tiddler bliver indsat i slutningen af  <body> sektionen på TiddlyWiki HTML filen umiddelbart efter script blokken",
	OptionsPanel: "Denne skyggetiddler bliver brugt til indholdet af muligheder skydepanelet i højre side",
	PageTemplate: "HTML skabelonen i denne skyggetiddler bestemmer det overordnede ~TiddlyWiki layout",
	PluginManager: "Denne skyggetiddler giver adgang til udvidelsesadministrationen",
	SideBarOptions: "Denne skyggetiddler bruges til indholdet af muligheder panelet i højre sidemenu",
	SideBarTabs: "Denne skyggetiddler bruges til indholdet af fanebladspanelet i højre sidemenu",
	SiteSubtitle: "Denne skyggetiddler bruges som anden del af sidens titel",
	SiteTitle: "Denne skyggetiddler bruges som første del af sidens titel",
	SiteUrl: "Denne skyggetiddler bør sættes til den fulde mål-URL til publikation",
	StyleSheetColors: "Denne skyggetiddler indeholder CSS definitionerne der bestemmer farverne på side elementerne. ''REDIGÉR IKKE DENNE TIDDLER'', lav i stedet dine ændringer i StyleSheet skyggetiddleren",
	StyleSheet: "Denne tiddler kan indeholde specialle CSS definitioner",
	StyleSheetLayout: "Denne skyggetiddler indeholder CSS definitioner der bestemmer layoutet på side elementer. ''REDIGÉR IKKE DENNE TIDDLER'', lav i stedet dine ændringer i StyleSheet skyggetiddleren",
	StyleSheetLocale: "Denne skyggetiddler indeholder CSS definitioner relateret til lokale oversættelser",
	StyleSheetPrint: "Denne skyggetiddler indeholder CSS definitioner til print",
	TabAll: "Denne skyggetiddler indeholder hvad der er i 'Alle' fanen i højre sidemenu",
	TabMore: "Denne skyggetiddler indeholder  hvad der er i 'Flere' fanen i højre sidemenu",
	TabMoreMissing: "Denne skyggetiddler indeholder  hvad der er i 'Mangler' fanen i højre sidemenu",
	TabMoreOrphans: "Denne skyggetiddler indeholder  hvad der er i  'Mangler tilknytning' fanen i højre sidemenu",
	TabMoreShadowed: "Denne skyggetiddler indeholder  hvad der er i 'Skyggede' fanen i højre sidemenu",
	TabTags: "Denne skyggetiddler indeholder  hvad der er i 'Tags' fanen i højre sidemenu",
	TabTimeline: "Denne skyggetiddler indeholder hvad der er i 'Tidslinie' fanen i højre sidemenu",
	ToolbarCommands: "Denne skyggetiddler bestemmer hvilke værktøjer der vises i tiddleres værktøjslinier",
	ViewTemplate: "HTML skabelonen i denne skyggetiddler bestemmer hvordan tiddlere ser ud"
	});

//}}}
Current theme:<<switchTheme width:auto>><<switchTheme label:Aktivér {{tiddler.title}} >>
/***
|Name|DefaultTheme|
|Source|http://www.TiddlyTools.com/#DefaultTheme|
|Version|1.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|Description|Default systemTheme definition|

|StyleSheet|##StyleSheet|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|PageTemplateReadOnly|##PageTemplateReadOnly|
|ViewTemplateReadOnly|##ViewTemplateReadOnly|
|EditTemplateReadOnly|##EditTemplateReadOnly|

!StyleSheet
/*{{{*/
[[StyleSheet]]
/*}}}*/
!PageTemplate
<!--{{{-->
[[PageTemplate]]
<!--}}}-->
!ViewTemplate
<!--{{{-->
[[ViewTemplate]]
<!--}}}-->
!EditTemplate
<!--{{{-->
[[EditTemplate]]
<!--}}}-->
!PageTemplateReadOnly
<!--{{{-->
[[PageTemplateReadOnly]]
<!--}}}-->
!ViewTemplateReadOnly
<!--{{{-->
[[ViewTemplate]]
<!--}}}-->
!EditTemplateReadOnly
<!--{{{-->
[[EditTemplateReadOnly]]
<!--}}}-->
***/
[[Velkommen]]
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description

Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.

''Syntax:'' 
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]]  is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].

!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features: 
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) 
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features: 
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs: 
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features: 
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version

!Code
***/
//{{{

	
//============================================================================
//============================================================================
//		   ForEachTiddlerPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {

if (!window.abego) window.abego = {};

version.extensions.ForEachTiddlerPlugin = {
	major: 1, minor: 0, revision: 8, 
	date: new Date(2007,3,12), 
	source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};

// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
	TiddlyWiki.prototype.forEachTiddler = function(callback) {
		for(var t in this.tiddlers) {
			callback.call(this,t,this.tiddlers[t]);
		}
	};
}

//============================================================================
// forEachTiddler Macro
//============================================================================

version.extensions.forEachTiddler = {
	major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};

// ---------------------------------------------------------------------------
// Configurations and constants 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler = {
	 // Standard Properties
	 label: "forEachTiddler",
	 prompt: "Perform actions on a (sorted) selection of tiddlers",

	 // actions
	 actions: {
		 addToList: {},
		 write: {}
	 }
};

// ---------------------------------------------------------------------------
//  The forEachTiddler Macro Handler 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.getContainingTiddler = function(e) {
	while(e && !hasClass(e,"tiddler"))
		e = e.parentNode;
	var title = e ? e.getAttribute("tiddler") : null; 
	return title ? store.getTiddler(title) : null;
};

config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);

	if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params
	// Parse the "in" clause
	var tiddlyWikiPath = undefined;
	if ((i < params.length) && params[i] == "in") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "TiddlyWiki path expected behind 'in'.");
			return;
		}
		tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the where clause
	var whereClause ="true";
	if ((i < params.length) && params[i] == "where") {
		i++;
		whereClause = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the sort stuff
	var sortClause = null;
	var sortAscending = true; 
	if ((i < params.length) && params[i] == "sortBy") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "sortClause missing behind 'sortBy'.");
			return;
		}
		sortClause = this.paramEncode(params[i]);
		i++;

		if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
			 sortAscending = params[i] == "ascending";
			 i++;
		}
	}

	// Parse the script
	var scriptText = null;
	if ((i < params.length) && params[i] == "script") {
		i++;
		scriptText = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the action. 
	// When we are already at the end use the default action
	var actionName = "addToList";
	if (i < params.length) {
	   if (!config.macros.forEachTiddler.actions[params[i]]) {
			this.handleError(place, "Unknown action '"+params[i]+"'.");
			return;
		} else {
			actionName = params[i]; 
			i++;
		}
	} 
	
	// Get the action parameter
	// (the parsing is done inside the individual action implementation.)
	var actionParameter = params.slice(i);


	// --- Processing ------------------------------------------
	try {
		this.performMacro({
				place: place, 
				inTiddler: tiddler,
				whereClause: whereClause, 
				sortClause: sortClause, 
				sortAscending: sortAscending, 
				actionName: actionName, 
				actionParameter: actionParameter, 
				scriptText: scriptText, 
				tiddlyWikiPath: tiddlyWikiPath});

	} catch (e) {
		this.handleError(place, e);
	}
};

// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {

	var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);

	var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
	context["tiddlyWiki"] = tiddlyWiki;
	
	// Get the tiddlers, as defined by the whereClause
	var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
	context["tiddlers"] = tiddlers;

	// Sort the tiddlers, when sorting is required.
	if (parameter.sortClause) {
		this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
	}

	return {tiddlers: tiddlers, context: context};
};

// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
	return this.getTiddlersAndContext(parameter).tiddlers;
};

// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
//				  The following properties are supported:
//
//						place
//						whereClause
//						sortClause
//						sortAscending
//						actionName
//						actionParameter
//						scriptText
//						tiddlyWikiPath
//
//					All properties are optional. 
//					For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
	var tiddlersAndContext = this.getTiddlersAndContext(parameter);

	// Perform the action
	var actionName = parameter.actionName ? parameter.actionName : "addToList";
	var action = config.macros.forEachTiddler.actions[actionName];
	if (!action) {
		this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
		return;
	}

	var actionHandler = action.handler;
	actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};

// ---------------------------------------------------------------------------
//  The actions 
// ---------------------------------------------------------------------------

// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
		return;
	}

	// Perform the action.
	var list = document.createElement("ul");
	place.appendChild(list);
	for (var i = 0; i < tiddlers.length; i++) {
		var tiddler = tiddlers[i];
		var listItem = document.createElement("li");
		list.appendChild(listItem);
		createTiddlyLink(listItem, tiddler.title, true);
	}
};

abego.parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i < parameter.length) && parameter[i] == name) {
		i++;
		if (i >= parameter.length) {
			throw "Missing text behind '%0'".format([name]);
		}
		
		return config.macros.forEachTiddler.paramEncode(parameter[i]);
	}
	return null;
}

// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;
	if (p >= parameter.length) {
		this.handleError(place, "Missing expression behind 'write'.");
		return;
	}

	var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
	p++;

	// Parse the "begin" option
	var beginExpression = abego.parseNamedParameter("begin", parameter, p);
	if (beginExpression !== null) 
		p += 2;
	var endExpression = abego.parseNamedParameter("end", parameter, p);
	if (endExpression !== null) 
		p += 2;
	var noneExpression = abego.parseNamedParameter("none", parameter, p);
	if (noneExpression !== null) 
		p += 2;

	// Parse the "toFile" option
	var filename = null;
	var lineSeparator = undefined;
	if ((p < parameter.length) && parameter[p] == "toFile") {
		p++;
		if (p >= parameter.length) {
			this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
			return;
		}
		
		filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
		p++;
		if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
			p++;
			if (p >= parameter.length) {
				this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
				return;
			}
			lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
			p++;
		}
	}
	
	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
		return;
	}

	// Perform the action.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
	var count = tiddlers.length;
	var text = "";
	if (count > 0 && beginExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
	
	for (var i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		text += func(tiddler, context, count, i);
	}
	
	if (count > 0 && endExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);

	if (count == 0 && noneExpression) 
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
		

	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else {
		var wrapper = createTiddlyElement(place, "span");
		wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
	}
};


// ---------------------------------------------------------------------------
//  Helpers
// ---------------------------------------------------------------------------

// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
	return {
		place : placeParam, 
		whereClause : whereClauseParam, 
		sortClause : sortClauseParam, 
		sortAscending : sortAscendingParam, 
		script : scriptText,
		actionName : actionNameParam, 
		actionParameter : actionParameterParam,
		tiddlyWikiPath : tiddlyWikiPathParam,
		inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
		viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
	};
};

// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of 
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
	if (!idPrefix) {
		idPrefix = "store";
	}
	var lenPrefix = idPrefix.length;
	
	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw "TiddlyWiki '"+path+"' not found.";
	}
	
	var tiddlyWiki = new TiddlyWiki();

	// Starting with TW 2.2 there is a helper function to import the tiddlers
	if (tiddlyWiki.importTiddlyWiki) {
		if (!tiddlyWiki.importTiddlyWiki(content))
			throw "File '"+path+"' is not a TiddlyWiki.";
		tiddlyWiki.dirty = false;
		return tiddlyWiki;
	}
	
	// The legacy code, for TW < 2.2
	
	// Locate the storeArea div's
	var posOpeningDiv = content.indexOf(startSaveArea);
	var posClosingDiv = content.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
		throw "File '"+path+"' is not a TiddlyWiki.";
	}
	var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
	
	// Create a "div" element that contains the storage text
	var myStorageDiv = document.createElement("div");
	myStorageDiv.innerHTML = storageText;
	myStorageDiv.normalize();
	
	// Create all tiddlers in a new TiddlyWiki
	// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
	var store = myStorageDiv.childNodes;
	for(var t = 0; t < store.length; t++) {
		var e = store[t];
		var title = null;
		if(e.getAttribute)
			title = e.getAttribute("tiddler");
		if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
			title = e.id.substr(lenPrefix);
		if(title && title !== "") {
			var tiddler = tiddlyWiki.createTiddler(title);
			tiddler.loadFromDiv(e,title);
		}
	}
	tiddlyWiki.dirty = false;

	return tiddlyWiki;
};


	
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
// 
//	 (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
	var script = context["script"];
	var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
	var fullText = (script ? script+";" : "")+functionText+";theFunction;";
	return eval(fullText);
};

// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
	var result = [];
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
	tiddlyWiki.forEachTiddler(function(title,tiddler) {
		if (func(tiddler, context, undefined, undefined)) {
			result.push(tiddler);
		}
	});
	return result;
};

// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
	var message = "Extra parameter behind '"+actionName+"':";
	for (var i = firstUnusedIndex; i < parameter.length; i++) {
		message += " "+parameter[i];
	}
	this.handleError(place, message);
};

// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? -1 
			   : +1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? +1 
			   : -1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
	// To avoid evaluating the sortClause whenever two items are compared 
	// we pre-calculate the sortValue for every item in the array and store it in a 
	// temporary property ("forEachTiddlerSortValue") of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
	}

	// Do the sorting
	tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);

	// Delete the temporary property that holds the sortValue.	
	for (i = 0; i < tiddlers.length; i++) {
		delete tiddlers[i].forEachTiddlerSortValue;
	}
};


// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
	displayMessage(message);
};

// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
	var message ="<<"+macroName;
	for (var i = 0; i < params.length; i++) {
		message += " "+params[i];
	}
	message += ">>";
	displayMessage(message);
};


// Internal.
//
// Creates an element that holds an error message
// 
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
	var message = (exception.description) ? exception.description : exception.toString();
	return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};

// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
	if (place) {
		this.createErrorElement(place, exception);
	} else {
		throw exception;
	}
};

// Internal.
//
// Encodes the given string.
//
// Replaces 
//	 "$))" to ">>"
//	 "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp("\\$\\)\\)","mg");
	var reGT = new RegExp("\\$\\)","mg");
	return s.replace(reGTGT, ">>").replace(reGT, ">");
};

// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
// 
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
	// Remove any location part of the URL
	var hashPos = originalPath.indexOf("#");
	if(hashPos != -1)
		originalPath = originalPath.substr(0,hashPos);
	// Convert to a native file format assuming
	// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
	// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
	// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
	// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
	var localPath;
	if(originalPath.charAt(9) == ":") // pc local file
		localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
		localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(7));
	else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(5));
	else // pc network file
		localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");	
	return localPath;
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
	".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
	"forEachTiddler");

//============================================================================
// End of forEachTiddler Macro
//============================================================================


//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
	var n =  prefix.length;
	return (this.length >= n) && (this.slice(0, n) == prefix);
};



//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
	var n = suffix.length;
	return (this.length >= n) && (this.right(n) == suffix);
};


//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) >= 0;
};

//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or 
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == item) {
			return i;
		}
	}
	return -1;
};

//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false. 
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
	return (this.indexOf(item) >= 0);
};

//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements 
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (this.contains(items[i])) {
			return true;
		}
	}
	return false;
};


//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
// 
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null] 
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (!this.contains(items[i])) {
			return false;
		}
	}
	return true;
};


} // of "install only once"

// Used Globals (for JSLint) ==============
// ... DOM
/*global 	document */
// ... TiddlyWiki Core
/*global 	convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, 
			displayMessage, endSaveArea, hasClass, loadFile, saveFile, 
			startSaveArea, store, wikify */
//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
//{{{
TiddlyWiki.prototype.getValue = function(tiddler,fieldName)
{
	var t = this.resolveTiddler(tiddler);
	if(!t)
		return undefined;
	fieldName = fieldName.toLowerCase();
	var primitives = config.textPrimitives;
	if(fieldName.indexOf(primitives.sectionSeparator) === 0 || fieldName.indexOf(primitives.sliceSeparator) === 0) {
		var sliceType = fieldName.substr(0, 2);
		var sliceName = fieldName.substring(2);
		return store.getTiddlerText("%0%1%2".format(t.title,sliceType,sliceName));
	} else {
		var accessor = TiddlyWiki.standardFieldAccess[fieldName];
		if(accessor) {
			return accessor.get(t);
		}
		return t.fields[fieldName];
	}
};
//}}}
Background: #fff
Foreground: #000
PrimaryPale: #ddeeaa
PrimaryLight: #ddeeaa
PrimaryMid: #666633
PrimaryDark: #014
SecondaryPale: #bbdd88
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #666633
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #aacc88
Error: #f88
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};


merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}},

	hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title == params[0], place);
	}},

	showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title != params[0], place);
	}},

	'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !window.hideWhenLastTest, place);
	}}

});

//}}}
/***
|''Name''|ImageMacroPlugin|
|''Version''|0.9.4|
|''Description''|Allows the rendering of svg images in a TiddlyWiki|
|''Author''|Osmosoft|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''Notes''|Currently only works in modern browsers (not IE)|
|''Requires''|BinaryTiddlersPlugin|
!Usage
{{{<<image SVG>>}}} will render the text of the tiddler with title SVG as an SVG image (but not in ie where it will fail silently)
!!Parameters
width/height: specify width/height parameters
link: make the image link to a given location
tiddlyLink: link to a tiddler

!Notes
Binary tiddlers in TiddlyWeb when passed through the wikifier will be shown as images.
eg. {{{<<view text wikified>>}}} on a binary tiddler will show the image.
{{{<<view fieldname image>>}}}
will render the value of the tiddler field 'fieldname' as an image. This field can contain a tid
{{{<<image SiteIcon>>}}}
will create an image tag where the tiddler has content type beginning image and not ending +xml
will attempt to create svg object in other scenarios
{{{<<image /photos/x.jpg>>}}}
will create an image tag with src /photos/x.jpg as long as there is not a tiddler called /photos/x.jpg in 
which case it will render that tiddler as an image. Note for the case of svg files it will attempt to render as an svg if possible via the image
tag. It doesn't embed the svg in the dom for security reasons as svg code can contain javascript.
!Code
***/
//{{{
(function($) {

var macro = config.macros.image = {
	shim: "/bags/common/tiddlers/shim",
	ieVersion: config.browser.isIE ? parseInt(config.browser.ieVersion[1], 10) : false,
	svgns: "http://www.w3.org/2000/svg",
	xlinkns: "http://www.w3.org/1999/xlink", 
	svgAvailable: document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"),
	_fixPrefix: 1,
	_external_cache: {},
	_image_tag_cache: {},
	_image_dimensions: {},
	locale: {
		badImage: "This image cannot be displayed."
	},
	handler: function(place, macroName, params, wikifier, paramString, tiddler){
		var imageSource = params[0];
		// collect named arguments
		var args = macro.getArguments(paramString, params);
		this.renderImage(place, imageSource, args);
	},
	init: function() {
		var startupImages = store.getTaggedTiddlers("systemImage");
		var place = $("<div />").attr("id", "systemImageArea").appendTo("body").hide()[0];
		for(var i = 0; i < startupImages.length; i++) {
			var image = startupImages[i];
			macro.renderImage(place, image.title, { idPrefix: "" });
		}
		var data = new Image();
		data.onload = function() {
			// note ie 8 only supports data uris up to 32k so cannot be relied on
			macro.supportsDataUris = this.width != 1 || this.height != 1 ? false : true;
			macro.supportsDataUris = macro.ieVersion && macro.ieVersion < 9 ? false : macro.supportsDataUris;
		};
		data.onerror = data.onload;
		data.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
	},
	refreshImage: function(src) {
		var elements = macro._image_tag_cache[src] ? macro._image_tag_cache[src] : [];
		if(macro._image_dimensions[src]) {
			macro._image_dimensions[src] = false;
		}
		for(var i = 0; i < elements.length; i++) {
			var el = $(elements[i]);
			var newSrc = "%0?nocache=%1".format(src, Math.random());
			el.attr("src", newSrc); // force reload
		}
	},
	isBinaryImageType: function(contentType) {
		return (contentType && contentType.indexOf("image") === 0 &&
			contentType.indexOf("+xml") != contentType.length - 4) ? true : false;
	},
	isImageTiddler: function(tiddler) {
		return macro.isSVGTiddler(tiddler) || macro.isBinaryImageTiddler(tiddler);
	},
	isSVGTiddler: function(tiddler) {
		var type = tiddler ? tiddler.fields['server.content-type'] : false;
		return type == "image/svg+xml";
	},
	isBinaryImageTiddler: function(tiddler) {
		return macro.isBinaryImageType(tiddler.fields['server.content-type']);
	},
	renderImage: function(place, imageSource, options) {
		var imageTiddler = store.getTiddler(imageSource);
		var container;
		var classes = ["image"];
		if(options.link) {
			classes = classes.concat(["imageLink", "externalLink"]);
			container = $("<a />").attr("href", options.link).appendTo(place)[0];
		} else if(options.tiddlyLink) {
			classes.push("imageLink");
			container = createTiddlyLink(place, options.tiddlyLink, false);
		} else {
			container = $("<span />").appendTo(place)[0];
		}
		$(container).addClass(classes.join(" "));

		options = options ? options : {};
		if(imageTiddler && macro.isBinaryImageTiddler(imageTiddler)) { // handle the case where we have an image url
			return macro._renderBinaryImageTiddler(container, imageTiddler, options);
		} else if(imageTiddler){ // handle the case where we have a tiddler
			return macro._renderSVGTiddler(container, imageTiddler, options);
		} else { // we have a string representing a url
			return macro._renderBinaryImageUrl(container, imageSource, options);
		}
	},
	_renderAlternateText: function(container, options) {
		var img;
		var src = options.src || "";
		if(options.width && options.height) {
			img = $("<img />").attr("src", src).addClass("svgImageText").attr("width", options.width).
				attr("height", options.height).appendTo(container);
		}
		var alt = options.alt;
		if(img && alt) {
			img.attr("alt", alt).attr("title", alt);
		} else if(alt) {
			$(container).addClass("svgImageText").text(alt);
		}
		macro._image_tag_cache[src] = img;
	},
	_renderSVGTiddler: function(place, tiddler, options) {
		if(!options) {
			options = {};
		}
		merge(options, { tiddler: tiddler, fix: true});

		if(macro.svgAvailable) {
			this._importSVG(place, options); // display the svg
		} else if(options.altImage) {
			var image = options.altImage;
			delete options.altImage;
			this._renderBinaryImageUrl(place, image, options);
		} else {
			this._renderAlternateText(place, options); // instead of showing the image show the alternate text.
		}
	},
	_renderBinaryImageTiddler: function(place, tiddler, options) {
		var resourceURI;
		var fields = tiddler.fields;
		if(fields["server.type"] == "tiddlyweb") { // construct an accurate url for the resource
			resourceURI = "%0/%1/tiddlers/%2".format(config.defaultCustomFields["server.host"],
				fields["server.workspace"], encodeURI(fields["server.title"]));
		} else { // guess the url for the resource
			resourceURI = tiddler.title;
		}
		var ctype = fields["server.content-type"] || tiddler.type;
		var text = tiddler.text;
		if(macro.supportsDataUris && ctype && text.indexOf("<html") == -1) {
			var uri = "data:%0;base64,%1".format(ctype, text);
			options.src = resourceURI;
			return macro._renderBinaryImageUrl(place, uri, options);
		} else if(options.src) {
			return macro._renderBinaryImageUrl(place, options.src, options);
		} else {
			return macro._renderBinaryImageUrl(place, resourceURI, options);
		}
	},
	_renderImageTag: function(container, src, width, height, options) {
		var img;
		img = $("<img />").appendTo(container);
		if(height) {
			img.attr("height", height);
		}
		if(width) {
			img.attr("width", width);
		}
		if(macro.ieVersion && macro.ieVersion < 7 && macro.shim && options.ie6png) {
			$(img).css({width: userW, height: userH,
					filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%0', sizingMethod='scale')".format(src)
				}).attr("src", macro.shim);
		} else {
			img.attr("src", src);
		}
		if(!macro._image_tag_cache[options.srcUrl]) {
			macro._image_tag_cache[options.srcUrl] = [];
		}
		img = $(img).addClass(options.imageClass)[0];
		macro._image_tag_cache[options.srcUrl].push(img);
		return img;
	},
	_getDimensions: function(realDimensions, reqDimensions, preserve) {
		var w = realDimensions.width;
		var h = realDimensions.height;
		var reqh = reqDimensions.height;
		var reqw = reqDimensions.width;
		var finalw = w, finalh = h;
		var ratiow = reqw / w, ratioh = reqh / h;
		var scaledw = ratioh * w;
		var scaledh = ratiow * h;
		if(!reqw && reqh) {
			finalw = scaledw;
			finalh = reqh;
		} else if(reqw && !reqh) {
			finalw = reqw;
			finalh = scaledh;
		} else if(reqh && reqw) {
			var preserveWidth = w > h ? true : false;
			if(preserve) {
				if(preserveWidth && scaledh < reqh) {
					finalh = scaledh;
					finalw = reqw;
				} else {
					finalh = reqh;
					finalw = scaledw;
				}
			} else {
				finalw = reqw;
				finalh = reqh;
			}
		}
		return { width: parseInt(finalw, 10), height: parseInt(finalh, 10) };
	},
	_renderBinaryImageUrl: function(container, src, options) {
		var srcUrl = options.src ? options.src : src;
		srcUrl = srcUrl.indexOf("/") === -1 ? "/%0".format(srcUrl) : srcUrl; // for IE. 
		var image_dimensions = macro._image_dimensions[srcUrl];
		var image = new Image(); // due to weird scaling issues where you use just a width or just a height
		var createImageTag = function(dimensions, error) {
			if(error) {
				var altImage = options.altImage;
				if(altImage) {
					delete options.altImage;
					macro._renderBinaryImageUrl(container, altImage, options);
				} else {
					options.src = src;
					macro._renderAlternateText(container, options);
				}
			} else {
				var dim = macro._getDimensions(dimensions, { 
					width: options.width, height: options.height }, options.preserveAspectRatio);
				options.srcUrl = srcUrl;
				macro._renderImageTag(container, src, dim.width, dim.height, options);
			}
		};

		if(!image_dimensions) {
			image.onload = function() {
				var dimensions = { width: image.width, height: image.height};
				macro._image_dimensions[srcUrl] = dimensions;
				createImageTag(dimensions);
			};
			image.onerror = function() {
				createImageTag(null, true);
			};
			image.src = src;
		} else {
			createImageTag(image_dimensions);
		}
	},
	_generateIdPrefix: function(){
		return "twsvgfix_" + (this._fixPrefix++).toString() + "_";
	},
	_fixSVG: function(childNodes, idPrefix) {
		var urlPattern = /url\(\#([^\)]*)\)*/ig;
		var fixes = [
		{ attr: "id", pattern: /^(.*)$/ig },
		{ attr: "href", namespace: macro.xlinkns, pattern: /^#(.*)$/ig }
		];
		var url_fixes = ["filter", "fill", "mask", "stroke", "style"];
		for(var i = 0; i < url_fixes.length; i++) {
			fixes.push({ attr: url_fixes[i], pattern: urlPattern });
		}
		for(var t = 0; t < childNodes.length; t++) {
			var node = childNodes[t];
			for(var a = 0; a < fixes.length; a++) {
				var fix = fixes[a];
				var attr = fix.attr;
				var ns = fix.namespace || "";
				if(node.hasAttributeNS && node.hasAttributeNS(ns, attr)) {
					var v = node.getAttributeNS(ns, attr);
					fix.pattern.lastIndex = 0;
					var match = fix.pattern.exec(v);
					if(match) {
						// Make sure replacement string doesn't contain any single dollar signs
						var toReplace = match[1];
						if(toReplace.indexOf(idPrefix) !== 0 && toReplace.indexOf("twglobal_") !== 0) {
							var replacement = (idPrefix + toReplace).replace("$", "$$$$"); 
							v = v.replace(match[1], replacement);
						}
						node.setAttributeNS(ns, attr,v);
					}
				}
			}
			var children = node.childNodes;
			if(children.length > 0) {
				this._fixSVG(children, idPrefix);
			}
		}
	},
	_importSVG: function(place, options){
		options = options ? options : {};
		var svgDoc, tiddlerText = options.tiddler.text;
		if (window.DOMParser) {
			svgDoc = new DOMParser().parseFromString(tiddlerText, "application/xml").documentElement;
			var idPrefix = options.idPrefix || this._generateIdPrefix();
			this._fixSVG([svgDoc], idPrefix);
			var el = document.importNode(svgDoc, true);
			var svgHolder = document.createElementNS(macro.svgns,"svg");
			var width = options.width;
			var height = options.height;
			if(width || height) {
				if(width && height) { // set view box of containing svg element based on the svg viewbox and width and height.
					var viewBox = el.getAttribute("viewBox");
					var topLeft = "0 0";
					if(viewBox) {
						topLeft = viewBox.replace(/([0-9]*) +([0-9]*) +([0-9]*) +([0-9]*) */gi,"$1 $2");
					}
					svgHolder.setAttributeNS(macro.svgns, "viewBox", "0 0 %0 %1".format(width, height));
				} else {
					if(!width) {
						width = el.getAttribute("width");
					}
					if(!height) {
						height = el.getAttribute("height");
					}
				}
				svgHolder.setAttribute("width", width);
				svgHolder.setAttribute("height", height);

				el.setAttribute("width", "100%");
				el.setAttribute("height", "100%");
				svgHolder.setAttribute("class", "svgImage svgIcon %0".format(options.imageClass || ""));
				svgHolder.appendChild(el);
				place.appendChild(svgHolder);
			}
			else {
				var existing = el.className ? el.className.baseVal : "";
				el.setAttribute("class","svgImage %0".format(existing));
				place.appendChild(el);
			}
			// if a tiddler attribute is set this is read as a link
			$("[tiddler], [tiddlyLink]", place).attr("refresh", "link").click(function(ev) {
				var tiddler = $(ev.target).attr("tiddlyLink");
				if(tiddler) {
					story.displayTiddler(ev.target, tiddler);
				}
			});
		}
	},
	getArguments: function(paramString, params) {
		var args = paramString.parseParams("name", null, true, false, true)[0];
		var options = {};
		for(var id in args) {
			if(true) {
				var p = args[id];
				if(id == "def") {
					options[id] = p;
				} else {
					options[id] = p[0];
				}
			}
		}
		var width = isNaN(params[1]) ? false : parseInt(params[1], 10);
		var height = isNaN(params[2]) ? false : parseInt(params[2], 10);

		options.width = macro.lookupArgument(options, "width", width);
		options.height = macro.lookupArgument(options, "height", height);
		options.preserveAspectRatio = args.preserveAspectRatio && 
			args.preserveAspectRatio[0] == "yes" ? true : false;
		options.tiddlyLink = macro.lookupArgument(options, "tiddlyLink", false);
		options.link = macro.lookupArgument(options, "link", false);
		return options;
	},
	lookupArgument: function(args, id, ifEmpty) {
		return args[id] ? args[id] : ifEmpty;
	}
};

// update views
var _oldwikifiedview = config.macros.view.views.wikified;
// update wikifier to check tiddler type before rendering
merge(config.macros.view.views, {
	wikified: function(value, place, params, wikifier, paramString, tiddler) {
		if(macro.isImageTiddler(tiddler) && params[0] == "text") {
			var newplace = $("<div />").addClass("wikifiedImage").appendTo(place)[0];
			macro.renderImage(newplace, tiddler.title, { alt: macro.locale.badImage });
		} else {
			_oldwikifiedview.apply(this, arguments);
		}
	},
	image: function(value, place, params, wikifier, paramString, tiddler) {
		// a field can point to another tiddler whereas text is the current tiddler.
		var title = params[0] == "text" ? tiddler.title : value;
		var args = macro.getArguments(paramString, params);
		macro.renderImage(place, title, args);
	}
});
config.shadowTiddlers.StyleSheetImageMacro = [".wikifiedImage svg, .wikifiedImage .image { width: 80%; }",
	".svgImageText { background-color:[[ColorPalette::Error]]; color:#ddd; display: inline-block; }",
	"span.svgImageText { display: inline-block; overflow: hidden; }"
].join("");
store.addNotification("StyleSheetImageMacro", refreshStyles);

})(jQuery);
//}}}
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2010.07.24 [1.2.2] moved tip/dragtip text to config.formatterHelpers.imageSize object to enable customization
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 2, date: new Date(2010,7,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.href=config.macros.attach.getAttachment(link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);
			addClass(e,"imageLink");
		}

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		}
		if(tooltip) img.title = tooltip;

		// GET IMAGE SOURCE
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
				img.onerror=(function(){
					this.src=config.formatterHelpers.resolvePath(this.src,false);
					return false;
				});
			} else
				src=config.formatterHelpers.resolvePath(src,true);
		}
		img.src=src;
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
}

config.formatterHelpers.imageSize={
	tip: 'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size',
	dragtip: 'DRAG=stretch/shrink, '
}

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.title=((stretchW||stretchH)?this.imageSize.dragtip:'')+this.imageSize.tip;
	e.statusMsg='width=%0, height=%1';
	e.style.cursor='move';
	e.originalW=e.style.width;
	e.originalH=e.style.height;
	e.minW=Math.max(e.offsetWidth/20,10);
	e.minH=Math.max(e.offsetHeight/20,10);
	e.stretchW=stretchW;
	e.stretchH=stretchH;
	e.onmousedown=function(ev) { var ev=ev||window.event;
		this.sizing=true;
		this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
		this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
		this.startW=this.offsetWidth;
		this.startH=this.offsetHeight;
		return false;
	};
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		}
		return false;
	};
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		this.sizing=false;
		clearMessage();
		return false;
	};
	e.onmouseout=function(ev) { var ev=ev||window.event;
		this.sizing=false;
		clearMessage();
		return false;
	};
}
//}}}
On 22. januar 2012 14:48:04, DitNavn imported 1 tiddler from
[[C:\Documents and Settings\mama\Skrivebord\empty\index.html|C:\Documents and Settings\mama\Skrivebord\empty\index.html]]:
<<<
#[[PasswordOptionPlugin]] - added
<<<

----
On 22. januar 2012 14:47:34, DitNavn imported 2 tiddlers from
[[C:\Documents and Settings\mama\Skrivebord\empty\index.html|C:\Documents and Settings\mama\Skrivebord\empty\index.html]]:
<<<
#[[UploadPlugin]] - added
#[[UploadTiddlerPlugin]] - added
<<<
//Alle artikler tagget med $1//
<<list filter "[tag[$1]][sort[-created]]">>
/***
|Name|ListboxPlugin|
|Source|http://www.TiddlyTools.com/#ListboxPlugin|
|Documentation|http://www.TiddlyTools.com/#ListboxPluginInfo|
|Version|1.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|set custom field or tiddler tags by selecting from listbox/droplist|
The {{{<<select>>}}} macro allows you to set tiddler field values by selecting pre-configured values from a listbox/droplist control.  
!!!!!Documentation
>see [[ListboxPluginInfo]]
!!!!!Revisions
<<<
2010.03.14 1.4.1 use filterTiddlers() instead of getTaggedTiddlers() - use MatchTagsPlugin for tag expressions
|please see [[ListboxPluginInfo]] for additional revision details|
2007.05.12 0.5.0 started
<<<
!!!!!Code
***/
//{{{
version.extensions.ListboxPlugin= {major: 1, minor: 4, revision: 1, date: new Date(2010,3,14)};

config.macros.select = {
	tooltip: "select a value for %0@%1",
	blankTooltip: "set %0@%1=[no value]",
	valueTooltip: "set %0@%1=%2",
	otherLabel: "other",
	otherTooltip: "set %0@%1=[enter a value...]",
	otherPrompt: "enter a value for '%0'",
	editLabel: "edit list...",
	editTooltip: "edit '%0' list definition (%1)",
	changeMsg: "setting %0@%1=%2",
	verbose: false,
	hereKeyword: "here",
	defaultTarget: "SiteFields",
	handler:
	function(place,macroName,params,wikifier,paramString,tiddler) {

		// default to containing tiddler or "SiteFields" catch-all
		var here=story.findContainingTiddler(place);
		var targetID=here?here.getAttribute("tiddler"):this.defaultTarget;

		// get field name and non-default target (if any)
		var field=params.shift();
		var pos=field.indexOf("@"); // if non-default target ("field@tiddler" syntax)
		if(pos!=-1) { // split field into field and tiddlername.
			if (field.substr(pos+1)!=this.hereKeyword) // "here" == use default target
				targetID=field.substr(pos+1); // use different target tiddler
			field=field.substr(0,pos);
		}
		if(!field || !field.length) return; // no field name... do nothing
		if (field.substr(0,1)=="=") targetID="(system)"; // internal option value

		var items=[]; var listsrc='';
		var autosave=false; var allowBlank=false; var allowOther=false; var allowEdit=false;
		var allowMultiple=false; var wikifyData=false; var rows=0; var width='';
		var p=params.shift();
		while (p) {
			if (p.toLowerCase()=='autosave')	// autosave on change
				autosave=true;
			else if (p.toLowerCase()=='allowblank')	// add empty item
				var allowBlank=true;
			else if (p.toLowerCase()=='allowother')	// add "other: ____" item
				var allowOther=true;
			else if (p.toLowerCase()=='allowedit')	// add "edit list..." item
				var allowEdit=true;
			else if (p.toLowerCase()=='allowmultiple') // multi-select
				var allowMultiple=true;
			else if (p.startsWith('rows:')) // 0=autosize listbox, 1=droplist, n=listbox
				var rows=p.substr(5);
			else if (p.startsWith('width:')) // CSS width of list
				var width=p.substr(6);
			else if (p.startsWith('prompt:')) // prompt text (1st item in list)
				var ptext=p.substr(7);
			else if (p.substr(0,1)=="+"||p.substr(0,1)=="*") { // read HR-separated tiddler
				var listsrc=p.substr(1);
				var listtxt=store.getTiddlerText(listsrc,'');
				var wikifyData=p.substr(0,1)=="*";
				if (listtxt.length && wikifyData) // wikify source to handle macros/scripts
					listtxt=this.getWikifiedData(listtxt);
				if (listtxt.length)
					items=items.concat(listtxt.split(listtxt.indexOf('\n----\n')!=-1?'\n----\n':'\n'));
			}
			else if (p.startsWith("=")) { // get items from tagged tiddlers
				var filter=p.substr(1);
				if (!filter.startsWith('[')) filter='[tag['+filter+']]';
				var tids=store.filterTiddlers(filter);
				for (var t=0; t<tids.length; t++) items.push(tids[t].title);
			}
			else { // param is item value or 'label=value'
				var parts=p.split("=");
				var label=parts[0]; var v=parts[1]?parts[1]:parts[0];
				items.push(label+"="+v);
			}
			p=params.shift();
		}
		if (rows==1) allowMultiple=false; // droplist cannot do multi-select
		if (tiddler && !story.isDirty(tiddler.title)) autosave=true; // tiddler is in VIEW mode, force autosave

		this.render(createTiddlyElement(place,"span"), null,
			targetID, field, ptext, items, listsrc, wikifyData,
			rows, width, autosave, allowBlank, allowOther, allowEdit, allowMultiple);

		store.addNotification(null,this.refresh); // syncs lists when tiddlers are changed
	},
	getWikifiedData: // wikify tiddler content, then extract text WITH newlines and HRs included
	function(txt) {
		var e=createTiddlyElement(document.body,"div"); wikify(txt,e);
		var breaks=e.getElementsByTagName("br");
		for (var b=0; b<breaks.length; b++) breaks[b].parentNode.insertBefore(document.createTextNode("\n"),breaks[b]);
		var lines=e.getElementsByTagName("hr");
		for (var l=0; l<lines.length; l++) lines[l].parentNode.insertBefore(document.createTextNode("----\n"),lines[l]);
		var items=e.getElementsByTagName("li");
		for (var i=0; i<items.length; i++) items[i].parentNode.insertBefore(document.createTextNode("\n"),items[i]);
		var txt=getPlainText(e); removeNode(e); return txt;
	},
	refresh:
	function (title) { // re-render dependent lists
		var lists=document.getElementsByTagName('select');
		for (var i=0; i<lists.length; i++) { var list=lists[i];
			if (list.getAttribute('listsrc')!=title) continue; // no sync needed
			var listtxt=store.getTiddlerText(list.getAttribute('listsrc')||'','');
			if (listtxt.length && list.getAttribute("wikifyData")=="true")
				listtxt=this.getWikifiedData(listtxt);
			if (listtxt.length)
				var items=listtxt.split(listtxt.indexOf('\n----\n')!=-1?'\n----\n':'\n');
			config.macros.select.render(list.parentNode, list,
				list.getAttribute('tiddler'),
				list.getAttribute('edit'),
				list.getAttribute('ptext'),
				items||[],
				list.getAttribute('listsrc'),
				list.getAttribute("wikifyData")=="true",
				list.getAttribute("rows"),
				list.getAttribute("width"),
				list.getAttribute("autosave")=="true",
				list.getAttribute("allowBlank")=="true",
				list.getAttribute("allowOther")=="true",
				list.getAttribute("allowEdit")=="true",
				list.getAttribute("allowMultiple")=="true");
		}
	},
	render:
	function (place, here, targetID, field, ptext, items, listsrc, wikifyData,
		rows, width, autosave, allowBlank, allowOther, allowEdit, allowMultiple) {

		var values=[]; var opts=[];

		// use current selection(s) (if any) (except for "edit list..." item)
		if (here) for (var i=0; i<here.options.length; i++) {
			var opt=here.options[i];
			if (opt.selected && opt.text!=config.macros.select.editLabel) values.push(opt.value);
		}
		// no listbox or no selections... get value(s) from field (if any)
		if (!values.length) {
			var v=(field.substr(0,1)=='=')?config.options[field.substr(1)]:store.getValue(targetID,field);
			if (v) values=(field=='tags'||allowMultiple)?v.readBracketedList():[v];
		}
		// add prompt item
		if (ptext&&ptext.length)
			opts.push('<option value="_ptext" title="">'+ptext+'</option>');
		// add 'no value' item
		if ((!allowMultiple && !values.length) || allowBlank)
			opts.push('<option value="" title="'+this.blankTooltip.format([field,targetID])+'"></option>');
		// add enumerated items
		var isOther=values.length; // assume no matching value
		for (var opt=0; opt<items.length; opt++) {
			var lines=items[opt].split("\n"); var parts=lines[0].split("=");
			var label=parts[0];
			var v=parts[1]?parts[1]:parts[0];
			var title=lines[1]?lines[1]:this.valueTooltip.format([field,targetID,v]);
			var sel=values.contains(v); if (sel) isOther=false; // found matching value
			opts.push('<option value="'+v+'" '+(sel?'selected':'')+' title="'+title+'">'+label+'</option>');
		}
		// add 'other...'
		if (field=='tags') isOther=false;
		if (isOther||allowOther) {
			var label="other"+(isOther?(": "+values[0]):"...");
			var v=isOther?values[0]:'';
			var t=this.otherTooltip.format([field,targetID]);
			opts.push('<option value="'+v+'" '+(isOther?'selected':'')+' title="'+t+'">'+label+'</option>');
		}
		// add 'edit list...'
		if (listsrc && (!store.getTiddlerText(listsrc) || allowEdit)) {
			var title=this.editTooltip.format([field,listsrc]);
			opts.push('<option value="'+listsrc+'" title="'+title+'">'+this.editLabel+'</option>');
		}
		// render listbox
		var html='<select '+(values[0]?'value="'+values[0]+'" ':' ')
			+' title="'+this.tooltip.format([field,targetID])+'"'
			+' rows="'+rows+'"'+' size="'+(rows!=0?rows:opts.length)+'"'+' style="width:'+width+'"'
			+' tiddler="'+targetID+'"'+' edit="'+field+'"'+' ptext="'+ptext+'"'
			+' listsrc="'+listsrc+'"'+' wikifyData="'+wikifyData+'"'
			+' autosave="'+autosave+'"'+' allowBlank="'+allowBlank+'"'+' allowOther="'+allowOther+'"'
			+' allowEdit="'+allowEdit+'"'+' allowMultiple="'+allowMultiple+'"'+(allowMultiple?' multiple':'')
			+' onclick="return config.macros.select.onClick(this,event)"'
			+' onchange="return config.macros.select.onChange(this,event)"'
			+' ondblclick="return false">'+opts.join('')+'</select>';
		place.innerHTML=html;
	},
	onClick:
	function(here,event) {
		var sel=here.selectedIndex;
		if (sel!=-1 && here.options[sel].text.startsWith(config.macros.select.otherLabel))
			here.onchange.apply(here,arguments);
	},
	onChange:
	function(here,event) {
		var cms=config.macros.select; // abbrev
		var sel=here.selectedIndex;
		if (sel!=-1) {
			if (here.options[sel].text==cms.editLabel) {
				story.displayTiddler(story.findContainingTiddler(here),here.value,DEFAULT_EDIT_TEMPLATE);
				return false;
			}
			if (here.options[sel].text.startsWith(cms.otherLabel)) {
				var newval=prompt(cms.otherPrompt.format([here.getAttribute("edit")]),here.value);
				if (!newval) {// user cancelled
					var v=store.getValue(here.getAttribute("tiddler"),here.getAttribute("edit"));
					{ here.value=v; if (v==undefined) here.selectedIndex=0; return false; }
				};
				here.options[sel].value=newval;
				here.options[sel].text=cms.otherLabel+": "+newval;
				here.value=newval;
			}
			if (here.options[sel].value=='_ptext')
				for (var i=0; i<here.options.length; i++)
					here.options[i].selected=false;
		}
		if (here.getAttribute("autosave")=="true") config.macros.select.setFieldValue(here);
		return false;
	},
	setFieldValue: function(here) {
		var tid=here.getAttribute("tiddler"); if (!tid || !tid.length) return; // no target, do nothing
		var field=here.getAttribute("edit");
		if (field.substr(0,1)=='=') { // option cookie instead of tiddler field
			config.macros.option.propagateOption(field.substr(1),"value",here.value,"input");
			return;
		}
		// ensure tiddler exists
		if (!store.tiddlerExists(tid)) store.saveTiddler(tid,tid,"",config.options.txtUserName,new Date(),[]);
		if (field=='tags') {
			store.suspendNotifications();
			for (var i=0; i<here.options.length; i++) {
				var opt=here.options[i];
				if (opt.text==config.macros.select.editLabel) continue;
				store.setTiddlerTag(tid,opt.selected,opt.value);
			}
			store.resumeNotifications();
		} else {
			// get multi-select items
			var values=[];
			for (var i=0; i<here.options.length; i++) {
				var opt=here.options[i];
				if (opt.text==config.macros.select.editLabel) continue;
				if (opt.selected) values.pushUnique(String.encodeTiddlyLink(opt.value));
			}
			if (values.length==1) values=[here.value]; // remove unneeded brackets around single value
			store.setValue(tid,field,values.length?values.join(' '):null); // if no selections, delete field
		}
		// 'touch' tiddler and report to user
		var t=store.getTiddler(tid);
		var who=config.options.chkForceMinorUpdate?t.modifier:config.options.txtUserName;
		var when=config.options.chkForceMinorUpdate?t.modified:new Date();
		store.saveTiddler(tid,tid,t.body,who,when,t.tags,t.fields);
		if (config.macros.select.verbose)
			{ clearMessage(); displayMessage(config.macros.select.changeMsg.format([field,tid,here.value])); }
	}
}
//}}}
<<tiddler SideBarTabs>>
[[Velkommen]]/%

^^~TiddlyWiki version <<version>>
© 2007 [[UnaMesa|http://www.unamesa.org/]]^^
%/
/*{{{*/
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #0078a5
PrimaryDark: #014
SecondaryPale: #ededed
SecondaryLight: #f16c7c
SecondaryMid: #00adee
SecondaryDark: #bf404f
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Grey: #e9e9e9
/*}}}*/
<<switchTheme label:Aktivér {{tiddler.title}} >>
/***
|!|!|!|!|!|!|!|!|!|!|!|!|!|!|!|!|
|!|!|!|!|!|!|!|!|!|!|!|!|!|!|!|!|
|!|!||||||||||||!|!|!|
|!|!||!|!|!|!|!|!|!|!|!||!|!|!|
|!|!||!||||!||!||!||!|!|!|
|!|!||!||!||!||!||!||!|!|!|
|!|!||!||||!||!||!||!|!|!|
|!|!||!||!||!||!||!||!|!|!|
|!|!||!||||!||!||!||!|!|!|
|!|!||!|!|!|!|!|!|!||!||!|!|!|
|!|!||||||||||!||||!|
|!|!|!|!|!|!|!|!|!|!|!|!|!|!|!|!|
|!|!|!|!|!|!|!|!|!|!|!|!|!|!|!|!|

|''Name''|MineralTheme|
|''Source''|http://bauwebijl-tiddlywiki.appspot.com/#MineralTheme|
|''Version:''|1.0|
|''Author:''|Bauwe Bijl|
|''Date:''|March 15, 2011|
|''License:''|[[BSD License|http://bauwebijl-tiddlywiki.appspot.com/#LegalStatements]]|
|''Comments:''|Please make comments at http://groups.google.nl/group/TiddlyWiki|
|''~CoreVersion:''|2.6.0|
|''Type''|CSS|
|''Description''|a ''~TiddlyWiki'' theme: http://bauwebijl-tiddlywiki.appspot.com/#MineralThemeInfo|
|''PageTemplate:''|##PageTemplate|
|''ViewTemplate:''|##ViewTemplate|
|''EditTemplate:''|##EditTemplate|
|''StyleSheet:''|##StyleSheet|

Depends on BackstageSidebarPlugin, SimpleSearchPlugin and TiddlerTweakerPlugin
***/

!PageTemplate
<!--{{{-->
<div id='header'>
<div id='sidebarSearch'>
<span macro='search'></span>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='topMenu' refresh='content' tiddler='MineralTheme##MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
!ViewTemplate
<!--{{{-->
<div macro="hideWhen readOnly"><div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]] more:popup'></div></div>
<div macro="showWhen readOnly"><div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbarReadOnly]] more:popup'></div></div>
<div macro="hideWhenTaggedAny -titel iframe sti"><div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!EditTemplate
<!--{{{-->
<span class='title' macro='edit title'></span></div>
<span class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]] more:popup'></span></div>
<div macro='annotations'></div><br>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<div macro='tiddler QuickEditToolbar'></div>
<div class='editor' macro='edit text'></div>
<!--}}}-->
!StyleSheet
[[StyleSheetShortcuts]]
/*{{{*/
#sidebar {
	display:none;
}
#contentWrapper {
    width: 800px;
    margin-left: auto;
    margin-right: auto;
    position: relative;
}
#header {
    [[MineralTheme##StyleGrey]]
    display: block;
    margin-bottom: 6px;
    margin-top: 6px;
    text-align: left;
}
#header .tiddlyLinkExisting, #header .tiddlyLinkNonExisting {
    background: none;
    color:[[ColorPalette::SecondaryMid]];
}
#sidebarSearch .txtOptionInput {
    margin-top: 10px;
    float: right;
    width: 11em;
}
#sidebarSearch .searchButton {
    display: none;
}
#topMenu{
    [[MineralTheme##StyleWhite]]
    width: 770px;
    height: auto;
    padding-top: 4px;
    padding-bottom: 4px;
    text-align: left;
    text-shadow: none;
}
#topMenu .tiddlyLink, #topMenu .button, .viewer .button, #topMenu .externalLink, #tiddlerMainMenu .tiddlyLinkExisting, #tiddlerMainMenu .tiddlyLinkNonExisting, #tiddlerMainMenu .externalLink {
    [[MineralTheme##StyleBlue]]
    font-size:120%;
}
#topMenu .tiddlyLink:hover, #topMenu .button:hover, .viewer .button:hover, #topMenu .externalLink:hover, #tiddlerMainMenu .tiddlyLinkExisting:hover, #tiddlerMainMenu .tiddlyLinkNonExisting:hover, #tiddlerMainMenu .externalLink:hover, .popup li a:hover {
    [[MineralTheme##StyleBlueHover]]
}
#topMenu .tiddlyLink:active, #topMenu .button:active, .viewer .button:active, #topMenu .externalLink:active, #tiddlerMainMenu .tiddlyLinkExisting:active ,#tiddlerMainMenu .tiddlyLinkNonExisting:active, #tiddlerMainMenu .externalLink:active, .popup li a:active {
    [[MineralTheme##StyleBlueActive]]
}
#searchResults .button {
    [[MineralTheme##StyleBlue]]
}
#searchResults .button:hover {
    [[MineralTheme##StyleBlueHover]]
}
#searchResults .button:active {
    [[MineralTheme##StyleBlueActive]]
}
#searchResults {
    [[MineralTheme##StyleWhite]]
    text-shadow: none;
    text-align: left;
    display: block;
    margin-bottom: 10px;
}
.tiddlerTweaker {
    background: [[MineralTheme##StyleWhite]]
    text-shadow: none;
    text-align: left;
}
#displayArea {
    margin-left: 0px;
    margin-right: 0px;
}
.toolbar {
    float: right;
    visibility:hidden;
}
.selected .toolbar, .toolbar a:hover {
    visibility:visible;
}
.annotation {
    margin-bottom: -8px;
}
.tiddler, .viewer pre {
    [[MineralTheme##StyleWhite]]
    display: block;
    margin-bottom: 10px;
    text-align: left;
    text-shadow: none;
}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {
    [[MineralTheme##BlueSharp]]
    text-shadow: none;
    color:[[ColorPalette::Background]];
}
.viewer table, table.twtable {
    border: 1px;
}
.viewer td, .viewer tr, .twtable td, .twtable tr {
    vertical-align: top;
}
.tabContents {
    background: [[MineralTheme##StyleWhite]]
    text-shadow: none;
    text-align: left;
    margin-bottom: 10px;
}
.tabUnselected {
    background: [[MineralTheme##StyleGrey]]
}
.tabSelected {
    background: [[MineralTheme##StyleBlue]]
}
.tagging, .tagged {
    [[MineralTheme##StyleWhite]]
    text-align: left;
    text-shadow: none;
    margin-top: 6px;
    margin-bottom: 10px;
}
.tagging {
    display: none;
}
.tagging .button, .tagged .button, .tagging .tiddlyLinkExisting, .tagging .tiddlyLinkNonExisting {
    [[MineralTheme##StyleWhite]]
}
.tagging .button:hover, .tagged .button:hover, .tagging:hover .tiddlyLinkExisting:hover, .tagging .tiddlyLinkNonExisting:hover {
    [[MineralTheme##StyleWhiteHover]]
}
.tagging .button:active, .tagged .button:active, .tagging:active .tiddlyLinkExisting:active, .tagging .tiddlyLinkNonExisting:active {
    [[MineralTheme##StyleWhiteActive]]
}
.tagged li, .tagging li  {
    margin-bottom: 6px;
    margin-top: 2px;
}
.popup {
    [[MineralTheme##StyleGrey]]
    text-align: left;
}
.popup li a:hover {
    margin-bottom: 4px;
    margin-top: 4px;
}
.popup li a, .popup li a:visited {
    [[MineralTheme##StyleBlue]]
    margin-bottom: 4px;
    margin-top: 4px;
}
.popup li.disabled {
    color:[[ColorPalette::Grey]];
}
.tiddler .toolbar .button {
    [[MineralTheme##StyleRosy]]
}
.tiddler .toolbar .button:hover {
    [[MineralTheme##StyleRosyHover]]
}
.tiddler .toolbar .button:active {
    [[MineralTheme##StyleRosyActive]]
}
#messageArea {
    [[MineralTheme##StyleGrey]]
    display: none;
    text-align: left;
}
#messageArea a, #messageArea a:hover {
    color:[[ColorPalette::SecondaryMid]];
}
[[StyleSheet]]
/*}}}*/
/%
!MainMenu
<<tiddler MainMenu>> -- @@position:relative;+++^^*[Værktøj|vis eller skjul værktøj]...<<tiddler ToolBox>>===@@{{floatright{<<tiddler MineralTheme##toggleReadonly>>}}}
!toggleReadonly
<html><nowiki><span class='checkbox' onclick="return this.getElementsByTagName('input')[0].click();"
	title="slå redigering af dette dokument til/fra">
<input type='checkbox' style="margin:0;padding:0;" onclick="
	window.readOnly=!this.checked;
	config.macros.option.propagateOption('chkHttpReadOnly','checked',window.readOnly,'input')
	config.macros.option.propagateOption('chkSinglePageMode','checked',window.readOnly,'input')
	window.showBackstage=!window.readOnly;
	if(showBackstage && !backstage.area) backstage.init();
	backstage.button.style.display=showBackstage?'block':'none';
	backstage.hide();
	story.switchTheme(config.options.txtTheme);
	store.notifyAll();
	story.refreshAllTiddlers(true);
	return false;
"></span></html><<tiddler {{
	var chk=place.lastChild.getElementsByTagName('input')[0];
	chk.checked=!window.readOnly;
'';}}>>
!StyleBase
/*{{{*/
	display: inline-block;
	zoom: 1; /* zoom and *display = ie7 hack for display:inline-block */
	*display: inline;
	vertical-align: baseline;
	margin: 0 2px;
	outline: none;
	cursor: arrow;
	text-align: center;
	text-decoration: none;
	font-size: 11px/100% Arial, Helvetica, sans-serif;
	padding: .2em 1em .275em;
	text-shadow: 0 1px 1px rgba(0,0,0,.3);
	-webkit-border-radius: .5em; 
	-moz-border-radius: .5em;
	border-radius: .5em;
	-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.2);
	-moz-box-shadow: 0 1px 2px rgba(0,0,0,.2);
	box-shadow: 0 1px 2px rgba(0,0,0,.2);
/*}}}*/
!GreySharp
/*{{{*/
	color: #606060;
	border: solid 1px #b7b7b7 !important;
	color: #e9e9e9;
	border: solid 1px #555 !important;
	background: #6e6e6e;
	background: -webkit-gradient(linear, left top, left bottom, from(#888), to(#575757));
	background: -moz-linear-gradient(top,  #888,  #575757);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#888888', endColorstr='#575757');
/*}}}*/
!StyleGrey
/*{{{*/
[[MineralTheme##StyleBase]]
	color: #606060;
	border: solid 1px #b7b7b7 !important;
	color: #e9e9e9;
	border: solid 1px #555 !important;
	background: #6e6e6e;
	background: -webkit-gradient(linear, left top, left bottom, from(#888), to(#575757));
	background: -moz-linear-gradient(top,  #888,  #575757);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#888888', endColorstr='#575757');
/*}}}*/
!StyleGreyHover
/*{{{*/
	color:#FFFFFF;
	background: #616161;
	background: -webkit-gradient(linear, left top, left bottom, from(#757575), to(#4b4b4b));
	background: -moz-linear-gradient(top,  #757575,  #4b4b4b);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#757575', endColorstr='#4b4b4b');
/*}}}*/
!StyleGreyActive
/*{{{*/
	color: #afafaf;
	background: -webkit-gradient(linear, left top, left bottom, from(#575757), to(#888));
	background: -moz-linear-gradient(top,  #575757,  #888);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#575757', endColorstr='#888888');
	position: relative;
	top: 1px;
/*}}}*/
!WhiteSharp
/*{{{*/
	color: #606060;
	border: solid 1px #b7b7b7 !important;
	background: #fff;
	background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed));
	background: -moz-linear-gradient(top,  #fff,  #ededed);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed');
/*}}}*/
!StyleWhite
/*{{{*/
[[MineralTheme##StyleBase]]
	color: #606060;
	border: solid 1px #b7b7b7 !important;
	background: #fff;
	background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed));
	background: -moz-linear-gradient(top,  #fff,  #ededed);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed');
/*}}}*/
!StyleWhiteHover
/*{{{*/
	color: #606060;
	background: #ededed;
	background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#dcdcdc));
	background: -moz-linear-gradient(top,  #fff,  #dcdcdc);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#dcdcdc');
/*}}}*/
!StyleWhiteActive
/*{{{*/
	color: #999;
	background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#fff));
	background: -moz-linear-gradient(top,  #ededed,  #fff);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#ffffff');
	position: relative;
	top: 1px;
/*}}}*/
!BlueSharp
/*{{{*/
	color: #d9eef7;
	border: solid 1px #0076a3 !important;
	background: #0095cd;
	background: -webkit-gradient(linear, left top, left bottom, from(#00adee), to(#0078a5));
	background: -moz-linear-gradient(top,  #00adee,  #0078a5);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5');
/*}}}*/
!StyleBlue
/*{{{*/
[[MineralTheme##StyleBase]]
	color: #d9eef7;
	border: solid 1px #0076a3 !important;
	background: #0095cd;
	background: -webkit-gradient(linear, left top, left bottom, from(#00adee), to(#0078a5));
	background: -moz-linear-gradient(top,  #00adee,  #0078a5);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5');
/*}}}*/
!StyleBlueHover
/*{{{*/
	color:#FFFFFF;
	background: #007ead;
	background: -webkit-gradient(linear, left top, left bottom, from(#0095cc), to(#00678e));
	background: -moz-linear-gradient(top,  #0095cc,  #00678e);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#0095cc', endColorstr='#00678e');
/*}}}*/
!StyleBlueActive
/*{{{*/
	color: #80bed6;
	background: -webkit-gradient(linear, left top, left bottom, from(#0078a5), to(#00adee));
	background: -moz-linear-gradient(top,  #0078a5,  #00adee);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#0078a5', endColorstr='#00adee');
	position: relative;
	top: 1px;
/*}}}*/
!RosySharp
/*{{{*/
	color: #fae7e9;
	border: solid 1px #b73948 !important;
	background: #da5867;
	background: -webkit-gradient(linear, left top, left bottom, from(#f16c7c), to(#bf404f));
	background: -moz-linear-gradient(top,  #f16c7c,  #bf404f);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#f16c7c', endColorstr='#bf404f');
/*}}}*/
!StyleRosy
/*{{{*/
[[MineralTheme##StyleBase]]
	color: #fae7e9;
	border: solid 1px #b73948 !important;
	background: #da5867;
	background: -webkit-gradient(linear, left top, left bottom, from(#f16c7c), to(#bf404f));
	background: -moz-linear-gradient(top,  #f16c7c,  #bf404f);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#f16c7c', endColorstr='#bf404f');
/*}}}*/
!StyleRosyHover
/*{{{*/
	color:#FFFFFF;
	background: #ba4b58;
	background: -webkit-gradient(linear, left top, left bottom, from(#cf5d6a), to(#a53845));
	background: -moz-linear-gradient(top,  #cf5d6a,  #a53845);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#cf5d6a', endColorstr='#a53845');
/*}}}*/
!StyleRosyActive
/*{{{*/
	color: #dca4ab;
	background: -webkit-gradient(linear, left top, left bottom, from(#bf404f), to(#f16c7c));
	background: -moz-linear-gradient(top,  #bf404f,  #f16c7c);
	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#bf404f', endColorstr='#f16c7c');
	position: relative;
	top: 1px;
/*}}}*/
!End
%/
<<tiddler [[SideBarOptions##tema]]>><<switchTheme label:Aktivér {{tiddler.title}} >>
[[link|http://maans.bplaced.net/TiddlyHome/temaer/index.html#txtTheme:StyleSheetCaspian StyleSheetCaspian]]
/***
|Name|StyleSheetCaspian|
|Source|http://caspian.tiddlyspace.com/|
|Version|1.0.0|
|Author|@jon|
|License||
|Requires|<<tag StyleSheetCaspian>>|
|Description|Caspian systemTheme definition|

|StyleSheet|##StyleSheet|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|PageTemplateReadOnly|##PageTemplate|
|ViewTemplateReadOnly|##ViewTemplateReadOnly|
|EditTemplateReadOnly|##EditTemplateReadOnly|
|ViewTemplateTS|##ViewTemplateTS|
|EditTemplateTS|##EditTemplateTS|
|PageTemplateTS|##PageTemplateTS|
|ViewTemplateTSReadOnly|##ViewTemplateTSReadOnly|
|EditTemplateTSReadOnly|##EditTemplateTSReadOnly|
|PageTemplateTSReadOnly|##PageTemplateTSReadOnly|

!StyleSheet
[[StyleSheetTiddler]]
[[StyleSheetTiddlySpace]]
[[StyleSheetShortcuts]]
/*{{{*/
.noButton .button { border: 0px solid transparent;}
.noButton .button:hover { 
color: white;
background-color: [[ColorPalette::PrimaryMid]] !important;
} 
.loggedInUser.readOnly #sidebar .tools .button {
margin-left: 0px;
margin-right: 16px;
}
.loggedInUser.readOnly #sidebar .tools .pushLeft.button {
margin-right: 0px;
}
@media all and (max-width: 960px) {
	#header { width: 300px; }
	#sidebar { display: none; }
	.tiddler .modifierIcon img,
	.tiddler .modifierIcon svg,
	.tiddler .spaceSiteIcon .originButton img,
	.originButton svg {
		width: 32px;
		height: 32px;
		margin-left: 15px;
		margin-right: 0px;
	}
}
#backstageArea .button:active {
color: white;
background: #DB4;
border: 1px solid #841;
}
#backstageArea .button:hover {
color: #014;
background: #FE8;
border-color: #DB4;
}
#contentWrapper {
margin-left: 166px;
margin-right: 166px;
width: 845px;
}
#searchResults {
margin: auto;
background: white;
margin-bottom: 20px;
padding: 8px;
border-radius: 8px;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
}

body.readOnly,
body {
background-image: url(/BackgroundImage);
background-color: [[ColorPalette::PrimaryMid]] !important; 
}
#contentWrapper {
width: 845px;
font-size: 0.8em;
}
#header {
margin-left: 12px;
color: white;
width: 845px;
margin-top: 30px;
margin-bottom: 30px;
letter-spacing: -1px;
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
font-size: 50px;
font-weight: bold;
height: 58px;
text-shadow: rgba(0, 0, 0, 0.496094) 1px 3px 5px;
}

/* content */
#content {
width: 520px;
float: left;
}
#content .tiddler {
border-top: none;
/*box-shadow: 1px 10px 10px [[ColorPalette::PrimaryLight]];*/
}
.tiddler .subtitle {
font-style: normal;
}
.tiddler .titleBar {
margin-left: 68px;
}
a.externalLink {
background: transparent url(/externalLink.png) no-repeat scroll 100% 45%;
padding-right: 1em;
}

.tiddler div.toolbar {
right: -6px;
}
#content  .tiddler .heading {
left: -55px;
}
.tiddler.missing .spaceSiteIcon {
display: none;
}
.readOnly .tiddler .spaceSiteIcon,
.tiddler .spaceSiteIcon {
visibility: hidden;
}
.tiddler.selected .spaceSiteIcon {
visibility: visible;
}
.readOnly .tiddler.selected .spaceSiteIcon {
visibility: hidden;
}
#content .tiddler .spaceSiteIcon {
margin-right: 10px;
padding: 5px;
border-radius: 10px 0px 0px 10px;
o-border-radius: 10px 0px 0px 10px;
moz-border-radius: 10px 0px 0px 10px;
webkit-border-radius: 10px 0px 0px 10px;
}
#content  .tiddler .editorHeading {
left: 0px;
}
#content .tiddler .modifierIcon {
right: -18px
}
#content  .tiddler .heading,
#content .tiddler .content {
width: 490px;
}
.tiddler .viewer {
margin: 0px 0px 0px 10px;
}
#displayArea, #tiddlerDisplay {
margin:auto;
width: 500px;
}
.tagInfo {
border-left: none;
border-right: none;
margin-left: 0px;
}
/* side bar */
.anonymousUser #sidebar .tools .button.followMenuButton {
display: none;
}
#sidebar {
width: 250px;
float: right;
position: relative;
right: auto;
/*font-family: 'Lucida Sans', 'Lucida Grande', 'Lucida Sans Unicode', sans-serif;*/
}
.tabContents .timeline {
background: none;
}
#sidebar .avatar {
-webkit-box-shadow: #CCC 1px 4px 4px;
background-color: white;
left: -5px;
padding: 8px;
position: relative;
top: -24px;
width: 128px;
}
#sidebar .avatar .image {
display: block;
background-color: whiteSmoke;
}
.twSearch .searchButton {
display: none;
}
.twSearch .searchField {
width: 210px;
}
#sidebar .tools .button {
width: 91px;
height: 32px;
display: inline-block;
text-align: center;
vertical-align: middle;
margin-top: 6px;
line-height: 32px;
font-size: 12px;
color: white;
background-color: [[ColorPalette::PrimaryMid]] !important;
font-weight: bold;
border: none;
border-radius: 5px;
margin-right: 0px;
margin-left: 16px;
margin-bottom: 6px;
}
#sidebar .tools .pushLeft.button,
#sidebar .tools .pushLeft .button{
margin-left: 0px;
}
.readOnly #sidebar .tools .button{
margin-left: 0px;
margin-right: 16px;
}
#sidebar .tools .button a {
color: white;
}
#sidebar .tools .button:hover {
opacity:0.8;
}
#sidebarCaspian {
padding-left: 20px;
padding-right: 20px;
width: 210px;
background-color: white;
border-radius: 10px;
-webkit-border-radius: 10px;
position: relative;
}
.twSearch input {
float: left;
}

/*}}}*/
!PageTemplate
<!--{{{-->
<div id='header' tiddler='SiteTitle##image' refresh='content'> </div>
<div id='content'>
	<div id='displayArea'>
		<div id='messageArea'></div>
		<div id='tiddlerDisplay'></div>
	</div>
</div>
<div id='sidebar'>
	<div id='sidebarCaspian' refresh='content' force='true' tiddler='MiniBlog##SideBar' class='viewer'></div>
</div>
<div class="clear"><div>
<!--}}}-->
!ViewTemplate
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::ViewToolbar]] icons:yes height:16 width:16 more:popup'>
</div>
<div class='heading'>
	<span class="titleBar">
		<div class='title' macro='view title text'></div>
		<span class="subtitle" macro="view modified date"></span>
		</span>
	</span>
	<div class='tagClear'></div>
</div>
<div class='content'>
	<div class='viewer' macro='view text wikified'></div>
</div>
<div class='tagInfo'>
	[[ViewTemplateExtras]]
	<div class='tidTags' macro='tags'></div>
	<div class='tagging' macro='tagging'></div>
</div>
<!--}}}-->
!EditTemplate
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::EditToolbar]] icons:yes'>
</div>
<div class='heading editorHeading'>
	<div class='editor title' macro='edit title'></div>
	<div class='tagClear'></div>
</div>
<div class='annotationsBox' macro='annotations'></div>
	<div class='tagClear'></div>
</div><div macro='tiddler QuickEditToolbar'></div>
<div class='editor' macro='edit text'></div>
<div class='editorFooter'>
	<div class='tagTitle'>tags</div>
	<div class='editor' macro='edit tags'></div>
	<div class='tagAnnotation'>
		<span macro='message views.editor.tagPrompt'></span>
		<span macro='tagChooser excludeLists'></span>
	</div>
</div>
[[EditTemplateExtras]]
<!--}}}-->
!PageTemplateReadOnly
<!--{{{-->
[[PageTemplateReadOnly]]
<!--}}}-->
!ViewTemplateReadOnly
<!--{{{-->
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::ViewToolbarReadOnly]] icons:yes height:16 width:16 more:popup'>
</div>
<div class='heading'>
	<span class="titleBar">
		<div class='title' macro='view title text'></div>
		<span class="subtitle" macro="view modified date"></span>
		</span>
	</span>
	<div class='tagClear'></div>
</div>
<div class='content'>
	<div class='viewer' macro='view text wikified'></div>
</div>
<div class='tagInfo'>
	[[ViewTemplateExtras]]
	<div class='tidTags' macro='tags'></div>
	<div class='tagging' macro='tagging'></div>
</div>
<!--}}}-->
<!--}}}-->
!EditTemplateReadOnly
<!--{{{-->
[[EditTemplateReadOnly]]
<!--}}}-->
!PageTemplateTS
<!--{{{-->
<div id='header' tiddler='SiteTitle##image' refresh='content'> </div>
<div id='content'>
	<div id='displayArea'>
		<div id='messageArea'></div>
		<div id='tiddlerDisplay'></div>
	</div>
</div>
<div id='sidebar'>
	<div id='sidebarCaspian' refresh='content' force='true' tiddler='CaspianTS##SideBar' class='viewer'></div>
</div>
<div class="clear"><div>
<!--}}}-->
!ViewTemplateTS
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::ViewToolbar]] icons:yes height:16 width:16 more:popup'>
</div>
<div class='heading'>
	<span class='spaceSiteIcon'
		macro='tiddlerOrigin label:no spaceLink:yes height:24 width:24 preserveAspectRatio:yes'>
	</span>
	<span class="titleBar">
		<div class='title' macro='view title text'></div>
		<span class="subtitle" macro='viewRevisions page:5'>
			<span macro='image clock.png'></span>
			<span macro="view modified date"></span>
		</span>
		<div macro="view title replyLink"></div>
	</span>
	<span class='followPlaceHolder' macro='followTiddlers'></span>
	<span class='modifierIcon'
		macro='view modifier SiteIcon label:no spaceLink:yes height:48 width:48 preserveAspectRatio:yes'>
	</span>
	<div class='tagClear'></div>
</div>
<div class='content'>
	<div class='viewer' macro='view text wikified'></div>
</div>
<div class='tagInfo'>
	[[ViewTemplateExtras]]
	<div class='tidTags' macro='tags'></div>
	<div class='tagging' macro='tagging'></div>
</div>
<!--}}}-->
!EditTemplateTS
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::EditToolbar]] icons:yes'>
</div>
<div class='heading editorHeading'>
	<div class='editor title' macro='edit title'></div>
	<div class='tagClear'></div>
</div>
<div class='annotationsBox' macro='annotations'>
	<div class='editSpaceSiteIcon'
		macro='tiddlerOrigin height:16 width:16 label:no interactive:no'>
	</div>
	<div class="privacyEdit" macro='setPrivacy label:no interactive:no'></div>
	<div class='tagClear'></div>
</div>
<div class='editor' macro='edit text'></div>
<div class='editorFooter'>
	<div class='tagTitle'>tags</div>
	<div class='editor' macro='edit tags'></div>
	<div class='tagAnnotation'>
		<span macro='message views.editor.tagPrompt'></span>
		<span macro='tagChooser excludeLists'></span>
	</div>
</div>
[[EditTemplateExtras]]
<!--}}}-->
***/
!SideBar
<<tiddler MiniBlog##nestedImage with:{{store.getTiddlerText("SiteSubtitle")}}{{store.getValue("MiniBlog","logo")}}>>

{{twSearch{
<<search>>
}}}
{{tools{
{{pushLeft{<<newTiddler>>}}}<<permaview>>{{pushLeft{<<newJournal>>}}}<<closeAll>>
}}}
<<tiddler SideBarTabs>>

!MissingAndOrphans
<<tiddler TabMoreMissing>>
<<tiddler TabMoreOrphans>>
!nestedImage
{{noButton{@@position:relative;+++^^*[»|Klik her for at skifte tema, farve, logo og tilstand!]...{{tools{
<<select logo@MiniBlog rows:1 width:7 "Vælg logo"autoSave  allowOther allowMultiple =logo>>
{{pushLeft tiny{<<tiddler SideBarOptions##toggleReadonly>>
<<switchTheme width:auto>>
{{smallform{<<selectPalette>>}}}
{{pushLeft tiny{<<RandomColorPaletteButton>>}}} ⇐ [[Ny palet|ColorPalette]]  }}}
|borderless widetable pushLeft|k
| <html><a href='http://linux-abc-noter.tiddlyspot.com/download' class='button pushleft'>download</a></html> | <<upload http://linux-abc-noter.tiddlyspot.com/store.cgi index.html . .  linux-abc-noter>> |
{{pushLeft tiny{<<saveChanges>>}}}
}}}
===@@<<setIcon "$2""-webkit-box-shadow: [[ColorPalette::PrimaryMid]] 1px 4px 4px;
background-color: white;left: -5px;padding: 8px;position: relative;top: -24px;width:128px;height:auto">>}}}<br>{{description{$1}}}
!end
<<tiddler AutoRefresh with: force paneID1>>
<<tiddler [[SideBarOptions##tema]]>> <<switchTheme label:Aktivér {{tiddler.title}} >>
/***
|Name|StyleSheetLottie|
|Source|http://lottie.tiddlyspace.com/|
|Version|1.0.0|
|Author|@jon|
|License||
|Requires|<<tag StyleSheetLottie>>|
|Description|Lottie systemTheme definition|

|StyleSheet|##StyleSheet|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|PageTemplateReadOnly|##PageTemplate|
|ViewTemplateReadOnly|##ViewTemplateReadOnly|
|EditTemplateReadOnly|##EditTemplateReadOnly|
|ViewTemplateTS|##ViewTemplateTS|
|EditTemplateTS|##EditTemplateTS|
|ViewTemplateTSReadOnly|##ViewTemplateTSReadOnly|
|EditTemplateTSReadOnly|##EditTemplateTSReadOnly|
|PageTemplateTSReadOnly|##PageTemplateTSReadOnly|

!StyleSheet
[[StyleSheetTiddlySpace2]]
[[StyleSheetShortcuts]]
/*{{{*/
/* general */
.tiddlyLinkExisting, .siteTitle {
font-weight: normal;
}
body {
background-color: [[ColorPalette::PrimaryDark]];
font: normal normal normal 16px/1.6 'helvetica neue', helvetica, arial, sans-serif;
}
#contentWrapper {
margin: auto;
margin-top: 20px;
margin-bottom: 20px;
width: 600px;
background-color: white;
padding-top: 20px;
padding-left: 50px;
padding-right: 50px;
padding-bottom: 20px;
}
.tiddler,
.menu,
.siteTitle {
border-bottom: solid 1px #CCC;
}
.tiddler .listTitle {
display: none;
}
.tiddler .origin {
display: inline;
margin-right: 8px;
float: left;
}
.tiddler .titleBar {
margin-right: 0px;
}
.tiddler .origin,
.tiddler .titleBar,
.tiddler .viewer {
margin-left: 0px;
}
.tiddler .originButton {
display: inline;
}
.tiddler .followPlaceHolder {
bottom: 0px;
right: 16px;
top: auto;
}
/*header*/
.siteTitle {
font-family: Georgia, serif;
font-size: 50px;
}
.menu {
text-transform: uppercase;
font-size: 12px;
padding-bottom: 30px;
}
.siteTitle {
padding: 40px 0px;
text-align: center;
}
.menu .searchButton {
display: none;
}
.searchField {
float: right;
}
/*body*/
#tiddlerDisplay, #searchResults {
margin: 0px;
}
.tiddler {
border-top: none;
}
.tiddler .header {
line-height: 48px;
}
.tiddler,
#footer {
font-size: 12px;
}
.tiddler .tagInfo {
margin: 10px 0 0 0px;
padding: 10px 0px;
background: none;
border: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}

.tagInfo ul {
padding-left: 0;
}
.tiddler .tidTags {
float: right;
margin-right: 6px;
}
.tiddler .tidTags a {
border: solid 1px #CCC;
border-radius: 8px;
background-color: white;
}
.tiddler .tagInfo a:hover {
border-color: red;
}
/*}}}*/
!PageTemplate
<!--{{{-->
<div id='header'>
	<div class='menu'>
		<span refresh='content' tiddler='MiniSite##MainMenu'></span>
		<div macro='search'></div>
	</div>
	<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
</div>
<div id='body'>
	<div id='displayArea'>
		<div id='messageArea'></div>
		<div id='tiddlerDisplay'></div>	
	</div>
</div>
<div id='footer' refresh='content' tiddler='Footer'></div>
<!--}}}-->
!ViewTemplate
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::ViewToolbar]] icons:yes height:16 width:16 more:popup'></div>
<div class='heading'>
	<div class="titleBar">
		<div class='title' macro='view title text'></div>
	</div>
	<div class='tagInfo'>
		<div class='tidTags' macro='tags'></div>
		<div class='tagging' macro='tagging'></div>
	</div>
	<div class='tagClear'></div>
</div>
<div class='content'>
	<div class='viewer' macro='view text wikified'></div>
</div>
<span class="subtitle" macro="view modified date"></span>
</span>
<!--}}}-->
!EditTemplate
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::EditToolbar]] icons:yes'>
</div>
<div class='heading editorHeading'>
	<div class='editor title' macro='edit title'></div>
	<div class='tagClear'></div>
</div>
<div class='annotationsBox' macro='annotations'></div>
	<div class='tagClear'></div>
</div><div macro='tiddler QuickEditToolbar'></div>
<div class='editor' macro='edit text'></div>
<div class='editorFooter'>
	<div class='tagTitle'>tags</div>
	<div class='editor' macro='edit tags'></div>
	<div class='tagAnnotation'>
		<span macro='message views.editor.tagPrompt'></span>
		<span macro='tagChooser excludeLists'></span>
	</div>
</div>
<!--}}}-->
!PageTemplateReadOnly
<!--{{{-->
[[PageTemplateReadOnly]]
<!--}}}-->
!ViewTemplateReadOnly
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::ViewToolbarReadOnly]] icons:yes height:16 width:16 more:popup'></div>
<div class='heading'>
	<div class="titleBar">
		<div class='title' macro='view title text'></div>
	</div>
	<div class='tagInfo'>
		<div class='tidTags' macro='tags'></div>
		<div class='tagging' macro='tagging'></div>
	</div>
	<div class='tagClear'></div>
</div>
<div class='content'>
	<div class='viewer' macro='view text wikified'></div>
</div>
<span class="subtitle" macro="view modified date"></span>
</span>
<!--}}}-->
!EditTemplateReadOnly
<!--{{{-->
[[EditTemplateReadOnly]]
<!--}}}-->
!ViewTemplateTS
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::ViewToolbar]] icons:yes height:16 width:16 more:popup'></div>
<div class='heading'>
	<div class="titleBar">
		<div class='title' macro='view title text'></div>
	</div>
	<div class='tagInfo'>
		<ul class='origin'>
			<li macro='tiddlerOrigin label:no spaceLink:yes height:16 width:16 preserveAspectRatio:yes'></li>
		</ul>
		<div class='tidTags' macro='tags'></div>
		<div class='tagging' macro='tagging'></div>
	</div>
	<div class='modifierIcon'
		macro='view modifier SiteIcon label:no spaceLink:yes height:48 width:48 preserveAspectRatio:yes'>
	</div>
	<div class='tagClear'></div>
</div>
<div class='content'>
	<div class='viewer' macro='view text wikified'></div>
</div>
<span class="subtitle" macro='viewRevisions page:5'>
	<span macro='image clock.png'></span>
	<span macro="view modified date"></span>
</span>
<div macro="view title replyLink"></div>
<div class='followPlaceHolder' macro='followTiddlers'></div>
<!--}}}-->
!EditTemplateTS
<!--{{{-->
<div class='toolbar'
	macro='toolbar [[ToolbarCommands::EditToolbar]] icons:yes'>
</div>
<div class='heading editorHeading'>
	<div class='editor title' macro='edit title'></div>
	<div class='tagClear'></div>
</div>
<div class='annotationsBox' macro='annotations'>
	<div class='editSpaceSiteIcon'
		macro='tiddlerOrigin height:16 width:16 label:no interactive:no'>
	</div>
	<div class="privacyEdit" macro='setPrivacy label:no interactive:no'></div>
	<div class='tagClear'></div>
</div>
<div class='editor' macro='edit text'></div>
<div class='editorFooter'>
	<div class='tagTitle'>tags</div>
	<div class='editor' macro='edit tags'></div>
	<div class='tagAnnotation'>
		<span macro='message views.editor.tagPrompt'></span>
		<span macro='tagChooser excludeLists'></span>
	</div>
</div>
<!--}}}-->
***/
!MainMenu
{{floatleft{<<tiddler MainMenu>>}}} {{floatright{<<tiddler [[SideBarOptions##tema]]>>}}}
!end
!usage
{{{[img[http://mama.tiddlyspace.com/bags/mama_public/tiddlers/SiteIcon]]}}}
[img[http://mama.tiddlyspace.com/bags/mama_public/tiddlers/SiteIcon]]
!notes
//none//
!type

!file

!url
http://mama.tiddlyspace.com/bags/mama_public/tiddlers/SiteIcon
!data

!usage
{{{[img[Måns2.png]]}}}
[img[Måns2.png]]
!notes
//none//
!type

!file

!url
http://www.linux-abc.dk/phpBB3/download/file.php?avatar=190_1295546407.png
!data

/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				var defopen=lookaheadMatch[1];
				var cookiename=lookaheadMatch[2];
				var header=lookaheadMatch[3];
				var panelwidth=lookaheadMatch[4];
				var transient=lookaheadMatch[5];
				var hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (label) {
					var parts=label.trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (openlabel) {
					var parts=openlabel.trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=defopen!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!deferred) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",blockquote?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
				}
			}
		}
	}
)

function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}

	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";

	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;

	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	return false;
}
//}}}
//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		p=p.parentNode;
	}
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function() {
		this.coreStop.apply(this,arguments);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Current theme:<<switchTheme width:auto>> <<switchTheme label:Aktivér {{tiddler.title}} >>
/***
|Name|CopperTheme|
|Source|http://copper.tiddlyspace.com/|
|Version|1.0.0|
|Author|Jon|
|License||
|Description|mimics jon's coppertheme in a "normal TW"|

|StyleSheet|##StyleSheet|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|PageTemplateReadOnly|##PageTemplate|
|ViewTemplateReadOnly|##ViewTemplateReadOnly|
|EditTemplateReadOnly|##EditTemplateReadOnly|

!StyleSheet
[[StickyStyle]]
[[StyleSheetShortcuts]]
/*{{{*/
.noButton .button { border: 0px solid transparent;}
.noButton .button:hover { 
color: white;
background-color: [[ColorPalette::PrimaryMid]] !important;
} 
.tabset {
padding-bottom: 12px;
padding-top: 24px;
padding-left: 0px;
padding-right: 0px;
}
.tab {
margin: 0px;
padding: 12px;
}
.viewer pre {
	height: 150px;
}
.toolbar,
.tiddlerFooter {
visibility: hidden;
}
.selected .toolbar,
.selected .tiddlerFooter,
.tiddlerFooter:hover {
visibility: visible;
}

.viewer img {
	height: auto;
	max-width: 240px;
}
.expandedSideBar .searchButton {
	display: none;
}
.expandedSideBar {
	position: fixed;
	bottom: 0px;
	left: 5em !important;
	height: 80%;
	margin-left: 10%;
	margin-right: 10%;
	width: 80%;
	opacity: 0.9;
	margin-top: 0px;
	margin-bottom: 10%;
	padding: 10px;
	overflow-y: auto;
}
#sidebarToggler {
	position: fixed;
	left: 0px;
	top: 50%;
	opacity: 0.8;
	background-color: #ccc;
	-webkit-transform: rotate(-90deg);
	-o-transform: rotate(-90deg);
	-moz-transform: rotate(-90deg);
	transform: rotate(-90deg);
	margin-right: 0px;
	font-size: 2em;
}
.button {
	font-size: 1.5em;
	margin-right: 8px;
}

body {
	font-size: 0.8em;
	color: rgba(0, 0, 0, .9);
	background: white;
	font-family: "Century Schoolbook", Century, Georgia, serif;
	text-shadow: 0 0 1px #D1EB78;
}



#footer,
#menuBar {
	border: none;
	background-color: #ffffff;
	padding: 0em;
	overflow: auto;
	line-height: 1.6em;
}

#footer ul,
#mainMenu ul { 
	list-style: none;
	padding-left: 0; 
}

#footer ul li,
#mainMenu ul li {
	display: inline;
}

#footer ul li,
#mainMenu a {
	padding-right: 1em;
}

#footer .content,
#mainMenu {
	left: 0;
	right: 0;
	position: relative;
	background-color: white;
	margin: 0;
	padding: 0.5em 0 0.5em 0;
	min-height: 1em;
	overflow: hidden;
	border-top: 1px solid black;
	border-bottom: 1px solid black;
	width: 100%;
	padding-top: 0.5em;	
	padding-left: 0em;
	padding-right: 11em;
	margin: 1em;
	border-bottom: 2px solid #b1b1b1;
	font-size: 1em;
}


#footer .content,
#mainMenu {
	margin: 0 auto;
	padding: 0;
	text-align: center;
	width: 100%;
	float: none;
}
#footer .content {
border: none;
background-color: [[ColorPalette::PrimaryPale]];
padding: 15px 25px;
}
#footer .content a,
#mainMenu a {
	color: #b1b1b1;
}

#footer .content a:hover,
#mainMenu a:hover {
	background: none;
	color: #d896bb;
}

#heading {
	background: [[ColorPalette::PrimaryLight]];
	padding: 30px 50px;
	text-align: center;
	position: relative;
}
#heading .siteIcon {
	position: absolute;
	top: 12px;
	left: 12px;
}
#heading h1 {
	font-size: 65px;
	font-family: 'Josefin Sans', 'Helvetica Neue', Helvetica, Arial, serif;
	line-height: 1em;
	font-weight: 100;
	color: white;
	text-shadow: -3px -3px 0px [[ColorPalette::TertiaryMid]];
	text-transform: uppercase;
	border-bottom: solid 2px [[ColorPalette::TertiaryMid]];
	width: 500px;
	text-decoration: none;
	margin: auto;
}

#displayArea {
	margin-left: auto;
	margin-right: auto;
	margin-top: 40px;
	margin-bottom: 0px;
	width: 960px;
}
#tiddlerEnd {
	clear: both;
}
.tiddler {
	height: 400px;
	width: 280px;
	float: left;
	position: relative;
	margin-right: 8px;
	border-top: 5px solid rgba(0, 0, 0, .2);
	margin-bottom: 8px;
	background-color: [[ColorPalette::TertiaryLight]];
}
.popup {
	background-color: [[ColorPalette::PrimaryLight]];
}

.tiddler .heading {
	margin-top: 10px;
}

.tiddler .viewer {
	height: 280px;
	overflow-y: auto;
}

.tiddler .spaceSiteIcon {
	float: left;
}
.tiddler .toolbar {
	position: absolute;
	top: 0px;
	right: 0px;
}
.tiddler .toolbar .moreCommand.highlight,
.tiddler .toolbar a:active,
.tiddler .toolbar a:hover {
	background: none;
	border: none;
	background: none;
	color: [[ColorPalette::Background]]
}
.tiddler .toolbar .glyph:hover {
	fill: [[ColorPalette::Background]]
}
.tiddler .toolbar .glyph:active {
	fill: green;
}
.toolbar a svg {
	width: 16px;
	height: 16px;
}
.toolbar a {
	border: none;
}
.tiddler .tagArea {
	margin-top: 10px;
	height: 55px;
	overflow-y: hidden;
	overflow-x: auto;
	width: 280px;
}
.tiddler .tagArea ul {
width: 1000%;
}
.tiddler .tagArea ul,
.tiddler .tagArea li {
	margin-left: 0px;
	padding-left: 0px;
	list-style: none;
}

.tiddler .tagArea li {
	display: inline-block;
}

.tiddler .tagArea li.listTitle {
	display: none;
}
.tiddler .modifiedDate {
	text-align: right;
	font-style: italic;
}

.editor textarea {
	height: 200px;
}
/*}}}*/
!PageTemplate
<!--{{{-->
<div id='menuBar'><div id='mainMenu' refresh='content' tiddler='MainMenu'></div></div>
<div id='heading'>
<div class='siteIcon' macro='tiddler Outline##nestedImage with:{{store.getValue("MiniBlog","logo")}}' ></div>
<h1 refresh='content' force='true' tiddler='SiteTitle'></h1>
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
	<div id='tiddlerEnd'></div>
</div>
<div id='sidebarToggler' macro='TiddlerPopUp "Outline##sidebar" lister  className:expandedSideBar autoposition:no'></div>
<div id='footer'><div class='content' refresh='content' tiddler='Outline##Footer'></div></div>
<!--}}}-->
!ViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]] icons:yes more:popup'></div>
<div class='heading'>
	<div class='title' macro='view title text'></div>
</div>
<div macro='tags' class='tagArea'></div>
<div class='tagClear'></div>
<div class='content'>
	<div class='viewer' macro='view text wikified'></div>
<div class='tiddlerFooter'>
<div class='modifiedDate'>last edited on <span macro='view modified date'></span></div>
</div>
</div>
<!--}}}-->
!EditTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]] icons:yes'></div>
<div class='heading'>
	<div class='editor title' macro='edit title'></div>
	<div class='tagClear'></div>
</div>
<div class='annotationsBox' macro='annotations'></div><div macro='tiddler QuickEditToolbar'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div>
<div class='editorFooter'>
	<span macro='message views.editor.tagPrompt'></span>
	<span macro='tagChooser excludeLists'></span>
</div>
<!--}}}-->
!PageTemplateReadOnly
<!--{{{-->
[[PageTemplateReadOnly]]
<!--}}}-->
!ViewTemplateReadOnly
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbarReadOnly]] icons:yes more:popup'></div>
<div class='heading'>
	<div class='title' macro='view title text'></div>
</div>
<div macro='tags' class='tagArea'></div>
<div class='tagClear'></div>
<div class='content'>
	<div class='viewer' macro='view text wikified'></div>
<div class='tiddlerFooter'>
<div class='modifiedDate'>last edited on <span macro='view modified date'></span></div>
</div>
</div>
<!--}}}-->
!EditTemplateReadOnly
<!--{{{-->
[[EditTemplateReadOnly]]
<!--}}}-->
***/
!Footer
@<<tiddler SiteSubtitle>> @
!nestedImage
{{noButton{@@position:relative;+++^^*[»|Klik her for at skifte tema, farve, logo og tilstand!]#panelID1:...{{span{
<<select logo@MiniBlog rows:1 width:7 "Vælg logo"autoSave  allowOther allowMultiple =logo>>
<<tiddler SideBarOptions##toggleReadonly>>
<<switchTheme width:auto>>
<<selectPalette>>
<<RandomColorPaletteButton>> ⇐ [[Ny palet|ColorPalette]]  }}}
|borderless widetable|k
| <html><a href='http://puppy-abc.tiddlyspot.com/download' class='button'>download</a></html> | <<upload http://puppy-abc.tiddlyspot.com/store.cgi index.html . .  puppy-abc>> |
===@@<<setIcon "$1""width:auto;height:96px">>}}}
!sidebar
<<tabs txtMainTab "Tidslinie" "Tidslinie" TabTimeline "Emner""Alle tiddlere tagget med emne" [[Outline##TabEmner]] "Alle" "Alle tiddlere" TabAll "Tags" "Alle tags" TabTags "Manglende" "Manglende tiddlere" TabMoreMissing "Uden tilknytning" "Tiddlere" TabMoreOrphans "Skyggede" "Skyggede tiddlere" TabMoreShadowed>>
!TabEmner
<<list filter "[tag[emne]][sort[-modified]]">>
!end
<html><p align="center"><textarea id="xclToTw" rows="10" cols="60"></textarea><br><button onclick="(function(){var ta=document.getElementById('xclToTw'); displayMessage('original: ' + ta.value); ta.value=ta.value.replace(/^|$|\t/gm, '|');})();" > Oversæt</button></p></html>
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			config.macros.option.genericCreate(place,'pas',opt,className,desc);
			// checkbox linked with this password "save this password on this computer"
			config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);			
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
		},
		onChange: config.macros.option.genericOnChange
	}
});

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
			saveOptionCookie(opt);
		return config.options[name] ? "true" : "false";
	}
});

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
			}
		},
		set: function(name,value) {config.options[name] = decodeCookie(value);}
	}
});

// need to reload options to load passwordOptions
loadOptionsCookie();

/*
if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
!usage
{{{[img[PuppyLogo.png]]}}}
[img[PuppyLogo.png]]
!notes
//none//
!type
image/png
!file
file:////mnt/home/Dropbox/Dropbox/Public/PuppyProjekt/400px-Puppy_logo.svg.png
!url
http://dl.dropbox.com/u/15835063/PuppyProjekt/400px-Puppy_logo.svg.png
!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2gQcDjgGZFzvygAAIABJREFUeJzsvXm8JVV19/2rqnvOPXe+fbsvPdIDPdCNNDQIomJAwfExGpXnjQQyoDxJ1Pj4mklNfD+amKBJJEii0WA0jm8SjBhNIqBEmUQeoBmabpAeoOfu28O9faczVdXe+/nj7LXPqn2qTtUduzFnfT73c8/ZtWvXrjpV61trrb32BlrSkpa0pCUtaUlLWtKSlrSkJS1pSUta0pKWtKQlLWlJS1rSkpa0pCUtaUlLWtKSlrSkJS1pSUta0pKWtKQlLWlJS1rSkpa0pCUtaUlLWtKSlrSkJS1pSUta0pKWtKQlLWlJS1rSkpa0pCUtaUlLWtKSlrSkJS1pSUta0pKWtKQlLWlJS1rSkpbMljinuwMtackZJP2oPRM5AN0x230ARf15EkAwT/2aL2lD7Rr06f8L2Gf7f4fex9VlJN2oXT+g8Tr2ASghet1KAKrsexlAhX2v6jrjACZQu+4TAEZZGf2NsTLeZkvmSFoAacnPo/QAOBvAMv23GMAggAEAC/X/AQCdqCnJAuoKcTpySv8fA3ACwHDC30kARwDsRU1Rzpf0ADgHwGrUrstZAFagdl1WoHZN+gF0zWOf5lp81H6L4wCG9OeT+vNx/f0AgIOo/W4tmYa0ANKSF6PkAawHsBY1xXgOgDX6/yq8OBThMQD7Ev5eQE0BTlVWATgfwGb9tw61a7JoRj39+Zdx1GCyH3Wo7AewG8AutACTKC2AtORMFg/ABgAXoqYYN+r/a1Fzt/y8SgBgJ4AdAJ4GsF1/3sfqOAAuBXAFgCsBXI6aNdWS2ZejqP0eu/T/5wA8gxpk/ltLCyAtOVPEBXAegJcDuEj/XYiam6klNRlDDSQ7UAPG+ae3O//tZRjAEwAe1/+fAPD8ae3RPEsLIC05XdKDmhJ8hf57GaLB2Ja05MUoowD+D4D79N/jAMLT2J85lRZAWjJf0g3gVQBerf9eip9vN1RLWgLURoQ9iBpMfoyalaJOZ4dmU1oAaclciQNgC4A36r9XogWMlrRkH4DvALgDwMN4kcOkBZCWzKZ0ogaLt+j/S05vd1oyBzIBQAAIHMcp6TKT2+G67hgAOI4jdDlc1+V6Rkop+fdepRQp0XYpZQF1pdqvP+eVUt0AeufgfE6nHALwbwD+BcBPT3NfpiUtgLRkprIQwC8CeBuAN2Bm+RTzIVUAIwBGHccZQS0xzXFdt4SaYhQAKlrplfV3z3VdAcCVUnaiptQKUkoXtZFinQAgpewAsEgptQC1PJP2+T21KcuY4zj7PM875rrumOu6k67rFnO5XDGXy5Xz+Xypvb29XCgUKl1dXZM9PT0TjuNI3oDjOAoA2trazOek7fx7XJ24+vb2sbGxrvHx8c5KpVKoVCqFarWar1arXb7vdwghCkKIjjAMO4QQ/UKIPqXUgJRykVJqEc7s4d07ANwG4GuoQfpFIS2AtGQ60ocaMH4FwNU4M1xTIYAjjuMcAjDkuu5J13UnPM8rua5bcRyn0t7ePu44ToUrJNd1ATQqNs/zGhRdTJnyPC9SwNsRQhR83+8NgqAzCIIOIUSnEKI3DMNFQoilAM5WSi3D3F4/33GcFzzP29fW1naoUCgc6e3tHenv7z/e1dU1wftPfc/n886FF17Yv/6c9QNnLT6rt6+vr7uzs7O7s6uzq7PQ2Z0v5Dvb2traXbi5tlxbvq2trd113ZzrujkllSLIOK7TDkAqpaQIRQmABCBDEfpCCh+ACvygEoRBKQiCchAG5aAalH3fr/i+Xx4bGytOjE9MDp0YGjt+/Hhx7969RSGEsq8zALiuqzh07Dqu66qxsbHCyZMn+06ePNk/OTnZXywWB6rV6mAYhoNCiCVSyuVKqcU4vffzKQCfB3AraomPZ7S0ANKSrNIO4M0ArgPwP3B6LA0FYL/jOHscxznuuu4J13XHPM8bb2trG9FuE3X22WcXNmzY0L1y5cquZcuWdZ911lnd/f393f39/d09PT3d3d3dXZ7n5XK5XM7zvDwA1dbWlvc8z9WfC67rOkoLAFmpVEpSSiWl9H3f9wHIarVKZUGlUvErlUppbGxsYnR0dHJ4eHjyxIkTxaGhoYndu3dPHj161EytYYHInZiYGCyXy/2+7y8MgmBQCLFUSrlWKbUKU3tGleM4ezzP297R0bG7v79//9KlS4e09UTXDwBw2WWXLdiyecvS1WtWLxk8a3BJX2/f4q7uroH29vaF+Vy+z3Ecl87fcRyplJJKKqWgJF0T3Z75rpRSUDVISCWj2zRYTDmUchxH0D6m3K4nlXJcR2oJwzAslsvl8XKpPDoxMXFqZHTk1NDQ0OiBAwdOvfDCC0XXdRusGaAGEPtixUHIcRx3z549iw8dOrRkdHR0SblcXuH7/tlCiNVKqbMxf3CZBPAXAG7B/M5aMCVpAaQlaXIugP8F4NdRmwJjviRELXHrec/zDnied7ytre14T0+P/8pXvnLgwgsvHFizZs3gihUrFi1evHhhf3//YF9f38KOjo4FnudlfcgVh4RSChFlWFeQoDIpI4rR7K+VrCmz6kkhRFitVicrlcpkqVQaGxkZGTlx4sTw4cOHT+3evXv4iSeeGBkZGQnIInAcR1UqlY7x8fHlxWJxebVaXSWEOFcptQ5RJVZsa2u7t7e394mlS5fu7OjooLm6FABcdNFFfVe86orV69avW7VkyZKVAwsGVnd3d5/tum57wrma/2cSPOi7gjLHNvsqSAUlpZRBuVIeHhsbGx4+MXxy6PjQyeeee274yJEjFSAdInFWDN+nWCy2Pffcc2cfOnRo1djY2Frf99eHYfgSzG0C5z4Avw3gh3N4jGlLCyAtiZN2AP8TwG+iluk8H/fJAQBPua77guu6J9asWTP5lre85axLLrlkxdq1a1csX758WX9//+LOzs5+x3HcWTjeTOBhyiyF2gAP3hYAsy2ubqVSGZ+YmDg1NjY2cvLkyeGjR4+e2r59+/GHH374ZBAEyvM8JYTIDQ8PL5+cnFwGwF+xYsX29vb2iud5WLp0aftb3/rWcy7YfMH6ZcuWbRhcNLi+UCjEQV8lnOu04aGkkhHlPwV40OepwMNcRwYR3b6EitYJwmBybHxseGRkZGjv3r3Ht23bdrJYLAog3krhEOEASQLQzp07z9qzZ885x48fP79SqVwspTwfs2upKACfBfB7qMXkzhhpAaQlXM5DDRq/jloQeC5lH4Cn2trann/ta18bvOUtb1lw3nnnrVi5cuXywcHB5T09PYswd/cnh4cNElKokbJm8FBKgSyQOAsFFjyoDV5X7w+l6opab1dCCP/UqVMnjh07dvTQoUPHd+zYceyRRx452dnZ6f7KO3/l3Isvvvj8lStXbu7v79/guq6H5hI5XyTDQ2gwzCo8dBsyDR4KSphjJcCDQ0S3L6WUynXc+rWFknBMn6WUUiqlxMTExPCJEydOHD58+NhTTz11fHx8PEwDSNx3oNEVNjw83Ll169YNQ0NDm8rl8iuFEBehNtPCTOUfUfMGNPThdEkLIKdH+lGbATZumo4KapO7Tc5TX3IA3gngPahlhs+VHAbwSG9v74F3vvOdbe94xzuWbdiwYd3y5cvXtre3z+fomOnCI1KWFR4EB7sNu67eZtpWSklWPwIU/T/0fb/U5rV1dHZ19vd09Szr6upKGzZ9WuChlFJwIJhVYbu9CBBSSaWkqlkdjuNkhoeU0rTBLRDHcyRqLkSpzyECaH2W4djY2MkjR44ce+6554b27ds3zi9aFivELuP19u7dO/Doo49eOjIy8gthGF6O2rM/Xfk8gN+Zwf6zKi2AzI64qE2LTbPDrkBt+vBlqMUNzkJtRtQOZL95JGpzH42iNqxvCPXZWp8H8Ciik+tNVbpQszZ+F8DKGbSTJArAjgULFmy/7rrrcN111w2uXbt23eDg4CqXhj7Nv8wHPMDrERQcx4nAw1LKEXjAcnWhER6x5UopX4bS6ezs7Orr61vZ09Oz2nEcJ+bcE+EBUrLThIeSte1x8ACzQmx40PckeLDPifBgI8Bi4SGljGyv/Wyy3t9amahUKqXjx48ffeaZZ47s3r17bKYA4d+Hh4c77rvvvpcdPXr0HUKIy5rfronyfgB/N819Z1VaAJmaeKhNkX2B/tsMYBNq6yzkT0N/hgA8AuBeAP+O2joTaTKI2g34fsy+m6rqOM6jW7ZsOfy7v/u7C17/+tdvOOuss7gSO53SAA4bHgwipowrexs+GeEBWAqfHwdAg+WSAgmuBAGuUHUd6lcQBH4+l2/v6ek5a+GChWu9Nq8PFgysa5AKD63oBfXDQELvR/XN/tOAB1kQNjwYRAR0AQXQ4+BBQMAU4EHlVFatViePHj069LOf/Wxo//79RSD7iK6k77lcbb2t+++/f9WOHTt+sVwuvw21ueGyio/atECPTWGfOZEz4cE+k2UZgMtQm+zv5ajN33Qmzw77NGog+RqAPda2NagF4d6N2T0Hv6Oj45G3vvWtox/84AcXb9myZVOhUJjKwzAf0gweQNQCIUVp4hFxoDEKNMFCseHByngbXDkDMTBAI3hI4UXqs7q2e8aUCSFUZ0dn14IFC1b39fatYude74cFD/u6pMFDqjrAssKDB8qNktdwMO0lwIP+G0tIQSrHuP8EXWf2W1EshJ+fAQevy8AilVJyfHx8dNeuXYe3b99+Qu9vJM0KiQMI5bQMDw93fec733n75OTkuxC/Emac7EXtBbaYVnEupQWQqCwCcBVqyXFXo+aSejGKAnA/gC+hNhT2gwB+GbM4MiSfzz/9lre8ZeTjH//4ivPPP/+cWRoZNReiOCQywIO0e4O7ymojMvLKAkgsPBAFGLm2GuChlarSSikCDyklrDfphrZ1GxxWBkjUN6VU0NHR0btwwcKVfX19qwAgKzzALYcEeOjRUBTcNv0ieJDbKw0eeh+yQCKgSIKHvnax8KBrwM5PaEVuQErA4J/ZPtL3/erhw4ePPfnkk0NjY2MBMDWAADWIEEAIKM8888yCe+655/2+7/9ixnv7LwD8Uca6cyItgNTWVHib/put0RI/l+K67v7LL79838c+9rGzrrrqqiwjfk63qBjF32AxYBrwUCz+wdvi3xG1PHgb/LgNkLD6aRQ1tzrYsSNDgrlVxOtyeJjhuYp2k7Kro6t70eCitd1d3St4/01/pJLmnJrBg7mkYMGDA1L3KQIPBozM8KD+QEFK1F1WYOAk5T8VeLBrzIEkhRCmjlJKHD58+Phjjz02VCqVGlaQzOLGEkIo+/Ntt932S6dOnfpohvs7QM2V/lyGunMi/x0B4qLmknobgLfjxWtlzJdUNm7cuO1DH/pQ56/92q+d29bWdjpiPdOSBMUeq6gRVfaJddUU4QErxqEseFhldZOCQYK3kVaeBA+qG+PKAZgC9Tyvra+nb+GihYvW5/K5bqXzQDBFeERcWTODh4jUiYGHlFLBgVRKCSmlcl03AgTbdaUtHQMPIYTZh7usHMehALxyHEcQPKz6MgxDcfTo0RPbt28/Pj4+Hln7I4sby3Zp5XI5fO5zn7t+cnLy/81wm98N4E0Z6s2J/HcCyGYA70Jt/qbWLLEp4nne0WuuuebIpz/96fUrV6580c2CGgeJOIWPKcADVpCabY/kbyABHjy+YR8TU4BEUjmVUXkzeFhuMcUUrom9dHR0FAb6B5YtWLDgHNdx3bmGBx9ppeMckoLkAKYEjwRYZoKHEEJ5nicIHlRGEOHw4BaJECJ4/vnnj23fvv0U3YdZ4yC2S0tK6dxyyy03hWH42gy3+8twmgLqP+8A6QPwawBuQC0A3pIUWbhw4TMf/vCHnQ9+8IPn5nK5M91FFSszgUezumnw4ACh+pYSjXNtJUECbL+m5ai9IUsOD8THPqgeFHPr8POyrSXUQOQNDAycddbgWefm2nLt5mxRe0u34cGuQQQeDAYEIMW/89FUHB4cNFLWEgU5PLTml67rxrmp7DLjkiIYcDcWlUkpBV0XDglWX1juLAOU8fHx0vbt24dGRkb8qcZBuEWye/fuvjvuuOP/R/oUQv+J2hIK8y4/rwC5FMAHAFyD0zu9eMlxnMMAjruuO+44TtFxnJLrumU2wR0AVKWU7QDyUsqcUqpLKZVDbX2ELgBdqjZr62LMzW9WuvTSS3928803L73iiiuWzUH78yaW4geiEIiUY4rwIAVs1W2AByl1Gx68jmJxERsGsOIiSrtTeH1mZShrf2kfm7+F62vUYIlYb+sN8JFSKs/zVG9Pb//ixYvXFtoLiwBI/fYfmZaEB/lhwYPXpXpJ8LCD5DHwENQ/Dg/bArPhEQMDAwldZqBA10Kfv4GGhgX9LjIMQ9Ou4zgyCAL5wgsvDO/Zs2eU359Z4yAkX/7yl68+ceLEp9Jue9QWb3s6pd6sy88TQDzU4hofRG2M9HyIdBzngOu6z7W1tR3I5/Mj+Xx+vL29fbyzs3O8UCgUAUAp5QCAEHVmUJkub/gdeBnVlVLmSqXS4mKxuNz3/XOEEJcAWD4L5zHxrne96yf/8A//cLWenfZFKc3gwbYBzQPcDW1wSwIpLi9SvPx4qg6oWEuC74cYeCgdc0ECPNj+EQipKChAys2CSiw8WL+5EjZlnYXOzhVnr9jQ3d29OAke5prFwEOX147ZBB5griqaokRPTyJYvyJuKsTAg1sZHAZoAg/ttuK/mSmXUgobHuT6ou9hGKrR0dHJ7du3DwdBIIGpxUEAIAxD96//+q9vU0pdmHL7fwHA+7I8J7MpPw8A6UBttsr/jVoW+FxJ1XGcbW1tbc8XCoUDnZ2dRwcGBo61t7dXVAoM1AwBElOfPjrFYnFFsVjcUK1Wr8IMBwT09vY++JOf/GTx5s2bN8ykndMhcZBQTBBV6kbB2nXRBB6kyJmSjbStMsADCZBwXTcCA67IY+Bh9zXSf1bHJBzSZ6VULDwi1gKDj6pDBFZ+hJRSqp6enq5lS5at7+7pXmzlazQmJcbAgycDsr5LGx6R7zrhUDF4WJYGt7ga4EGKHwwetF2xkVY2PJj1QbkwgsODrovS8KCLVCwWqzt37hyenJwUU4mDkNx+++0X7d2797aUR2AMtby1Ukq9WZUXM0AKAH4LtXHQcxEUrzqO81Q+n3+yr69vz+LFiw+0t7f7ahowSNsnab84K8RqJ3LciYmJVaVS6WVCiDdh+vPtDH/4wx9+8KabbvrFKUyLflrFVuRIgYdWCql1ZwAPZdfj29nbMdVpaBtWAB5RMPD2GuBBSo/aUI1B5cj+/Di8HrXNy5iSJFeYAcnZy89ed+TokeWf/8LnF953332D4+Pj+UWLFpUuvODCU9dfd/3Ry191eRkZ4EHWBocHubyywoOmL7F+S2mdWwNIWJn5zuMgBA86d8XgEYahgUoQBJKBVpbL5WDHjh0jgisBpMdBACAIAtxyyy1fVUqdl/IovBvAV6bw6MxYXowAyQO4EcAfozbn1KyJ4zi78/n8A/39/c8sW7bsoOd5NLa7QZHTfTAwMJBbtWpV97Jly7oWLVrU2dvb2yGlRC6Xy3V0dBgFHIYhJicn/TAMAyGEGhsbKx89erR89OjR8qFDh0qnTp2Sdn+mChD67Pt+39jY2CuCIPgl1AYSTFXUhg0bvv3YY49d2dvbO59rgExZ4hR/jHKPKEgwN1RcfUThYZQ+2z9iubC31CR4xFk+EUgklccofKP0lVKK+f5NeVZ4MMXLA+0cLBG3F+8fKU7aR0qJH/3oRwv+/u///jd934+d6eDCCy8cuuWvb3l2w4YNAZhrC03gYSyaeoY5P0dpnyM0PKg9y5XF+6tQmxqdw4HKeD2zXxiGklsj0IF0ggfV5/AIw1ABEEEQqEql4u/atWucQyQLQADgH//xH688fvz4p1Meh/8C8LqUOrMqLzaAvB3AX6E2H9VsiHQc54lCofCT5cuXb1+0aNEJWNekvb3du/LKK5esXbt20eLFixcODAws7OvrG+jq6hooFAo9nuflGhqV0nY/0VQJdMPSzSn0zS6CIKgWi8WJ0dHR0ZGRkdFjx46NHzhwYHzXrl1jzzzzzHhtEby66HuwqRUTBEHnyMjIlUKI/4lpDCbI5/M/feihhzouueSSi6a673xIEiSSypPgYdedKjyg4xFMIvCgdtEEEvo4HBrGmnBdl7fJgRFJKKTz424ppeoBeMUAEQcPVj+ynSlT2KOStPJTAOT111//25OTk01jcoVCIfi7z/3dw69/3esnjHJmEOFxDoKHlFI6rhOBB/st+HkLDg/ef+s86Dx5UFxJKSUN0U0YaWVGb+mHtyHmIYQQHB66HgXW1cTERHXfvn1mzfMscRAAOHr0aP5rX/vanQCaDakPUPPGjDT7DWZTXiwAOQ/A3wDIMiY6VRzH2dbd3X33ypUrt/X29k4o/Xafz+edq666atmWLVtWn3322csWLly4ore3d7HjOFNy5XCAKA0PVRunLvXdKzQ8lIYK3YRUTlWFlLU1VE+ePDly5MiRU/v27Tv11FNPDW/fvp1uwtRYiu/7vePj428SQrwFU//ND33uc5975Hd+53feMY1950ziFH/9Y2NMAzGjo+La4HW4go7blwMlYRisqY8mI6/0cSLQ4H2JgwSDoa1EE+HBoQBErY4s8CAlapcBkJOTk97111//8Sy/XS6XC2/+q5sfeusvvXWMx02mAg/9WbDfhZ4t45KyEwopFqKfuci52/Cg/7IeLOf1Y2MeRBvo51lKKYMgoKHAkr4PDw8Xh4eHfX0tAKTHQaSU6tZbb/1d3/evS7m8N6A2F968yBmjEBKkE8BNqM0cO1N//NFCoXDn0qVL/8/y5cuHqPB1r3vd0ksvvXTdmjVr1i1atGhtLpeLvKnrB35KQgDR8CDrQ8qa/1QSJAAIekMhWHB46BuT/LlCfxZSSjk+Pl4+ePDgiV27dp3aunXr8MGDB8tpcZSJiYk15XL5V5VSG6d4SpM33HDDt770pS/96hkySovr5+nCo6GuVpxg+xnFjHh4RADBgULK1trWYGGAKXO+jco4mEgZ2vCg48EKfutrxZWkUioSsDd1qT77TNtNGR+VxBSqUd6/8Ru/8b40C4TE8zzxJ3/yJw/96nW/OhwHD/1ZOG5kyhYb0ryfsfCga5gFHrZlZcODLA+lwcxjHpHxvVoIHkEQGDdWEARCKSUOHjxYSrI6kgDy3e9+d9OuXbu+nnJpv4uap2Ze5EwGyKsBfBkzG1mlPM97cHBw8D/WrVu303Ecmc/nnTe/+c2rX/7yl59/zjnnbO7o6FgINAa1TQPTAwg9dELfcEQFQwfU4GGskBh4CH0TmhtSCCHCMIx8FkLIMAzlyZMnx5955pmTjz/++PDevXvNSIyY0Vxtp06dujIIgl9DbTGprCIuvfTSbzzwwAPvKBQKpzMzPQ4e9hDeCCRmAg/FrAskwMNS6A3wiDmOgQFi4EFtxFg/kWPxcmqHFCD1m4OCt5EU17C2R+ChLMjQedAt/e1vf3vN7bfffiMy6hXXddUf/uEfPvjbv/Xbx3nSYBI86NrRZ319BD9HpaL5Hfy3ECxvgwElAo+4YDm1YcND1xeSdYDHPAge9GxreCgppRgZGQkmJycDIHscpFqtOp/5zGfuQvNlGMb19nlZ+vZMBEgBwF8DeC+m379iPp//3qpVq+5ZsWLFCQC45JJLFr797W9/xdq1ay8uFAoNgWWVABC9LfOBa2xAg7uKbj7JrBAbGvRZKWU+M6vDvOkQeMIwNBYKlfu+r06dOlXasWPHiYcffnh4bGwsjAvGF4vFZcVi8TcBrM9+WYHly5d/42c/+9nre3p6Fk9lv1kSxQUp8GAKOdaKYMoo0gYsoKAOByXrc0fFWihcYWklx7vMFWIcPJS13ZSTjoortwPFaZ/pu74PzeSKcUCxA+X0Nm8NbTV1v/71r2+6++67r1dKZfIYOI6D977nvT/5/d///UMaHlLnedjuuQj4ssCD+k75HTx+Q9t5ciA9Uw6byVdp9xTLAzEg0bkdhjhxMQ8pa5aIECJUSqkwDKXv+0oIEca5sZoBREqpbrnllo+EYXhNymW9FMDWLNd/pnKmAWQ9gG+hllU5HRnp6ur65qZNmx7o6ekpd3R0uDfeeOOWiy666LKFCxeuQ5PzVbMAEKawBA+UM2hwgERcV7SNygkIBBEChaxbLTIIAqGF3nBktVo1bzthGIp9+/aNPfXUU6O7du2KJDVqpZkbHR39JSHE26ZykRcsWPCt559//lULFiyYz6x1roibwUPpBzpSzhU5EG9J8DZof749Kzz4cextsJQ+EuDBlGQcPIA65CLxFVVX9rxvHA6SXyMODwqIK1UfusqhwlxBCrWXJOj71ihVpZS68847V/7Lv/zLjUKIzOvOvPuGdz/0kY98ZF8cPOg6xQwljoCP+g405nfEwcNODgzD0NSlMjoO+y0MPOjAsGIenucJDo8gCIS2WggeUkopxsfHwyRoJLmxvva1r11+7NixW1Mu5x8CuDnrtZ+JnEkAeT2Af0XzUQZJMtLV1fWNl7zkJfd1d3dXu7u7c+973/tetmXLlqs6Ojoyr7qnZuDG0jd5BByq7sKKwMN2VfHv5KLin214iLrIMAxlEATkyhJhGIpqtaoYRGQYhuLEiRPVJ598cmTPnj0lxSACABMTExdUq9XfQW2Z20zS1dX1nwcOHLhwYGDg7Kz7zEC4XubKNhUeiCr4hrhIXBtp8OCKPu6Y9nFIsfK2mfI2Li8LLNwSio2jkD5jcIwoXRq9ZdVtOBY/PrXBviulokCha2PDQwhhLJSHH3548Mtf/vJvBUGQ6flzHAfvec977v3gBz940D4/di0lh0cMFO0yyc+Hb2eWlODw0NdXJMGDnj/eQRI75kEvc7IGZ/Mca8tFFotFMdU4yDPPPNP//e9//56Uyzlvc2OdKQC5DrUEmKkGaCc7Ojr+cfPmzfd2d3dXOzqItC2nAAAgAElEQVQ63A984AOvuPjii1+Xz+ennP+gpmmFaO0ScT2peHiQuSz0B4KCAYUFEamUEr7vU5zExEVY/EOEYSgIIkEQSN/3jdUShqHwfV9VKhUZhqEYGRmp7ty5c2Lfvn0VAggAVKvVJRMTEx/AFNZH7+zsvHPfvn3nDQ4Ors66zzREcUECDIyms+Bh/U+EBywQ8H1tODBF07APb5dDgr6jrhxJ8XNryIyCYsekt39l7c9BE1GOVG7HQPgIK9rGrQ6qp+/nyLnWb8e6JUL3NrmxGGSkEELt3Lmz53Of+9xvl8vlTPlajuPIP/iDP/jhu9/97qPUT/b7GJeVnQxonz/txwHB97GHInN48GeW7UdxD+OmisvzsNxWgsPD932llBLaclFSSnrRmxJAAODTn/707UqpZrHhIQBLs1zzmcrpnm3VAfAnqA3RncooK5nL5f71ggsu+NS55577TD6fF7/+67++8fd+7/fevWbNmpd5njfdLOwpA1XfeNyyEHQDEzgIBLZ1EhPnoHqKfTZ1CQhhGCoCB0GDoKKtDtouq9WqDIJAEFiUUliwYEG+r68vNzExEfq+rwCgra1tMpfLPeb7/hLUpkRIlSAI1n/hC1+4733ve9+CQqGQdSnOKV5eA4vZgAcwc3goVQtQ28c0HUF0NBVgwcPqEwcDrGNGjkv91uWRukzhGmVOINLfGywM3rRibixu0QBQLM6heD2lVCI8lFJqwYIF5c2bNz/xxBNPrPB9fzDD7+088sgjaxYuXHjwvPPOKzJAUu4U9dX0gyBsgTKSHMj3YdeRrIkIPMjK4u3Q8Qke1BZ9pxgJwaNardKzb+BBz6+UksdB6M0CnueZl1TP8+C6rqOUgufVVTRtf+yxx1YJIc5vch27AdwGYDLDNZ+RnE6AOKhNAPb7mILidhxn2/r16z968cUXP9jd3e1v2rSp9xOf+MT1l1xyyZtzudyMlJjjONSvTKKf+IgLSt+MkbiGZZU0DN3V/5XeTm9E5rMQwgTQCQwED3JVCSFUEASm7UqlQmARdENXKhXp+76oVCoSgNPX19fmui6KxaJUSsF1Xb+jo2NrpVIpIGOypu/7G2+77bb/ev/7339WPp+fzZmPjcbin/V3o0C5crXL0QgP8/zbdTk86C8BHhFrQ+8fGXnFFJ85Jjtuw2ckx1fqZkDdmjFuL2oX0RhIU3jE9MOUsfiGUgnwsOIi4G1xeJDi7e7u9l/+8pc/8fjjjw+Wy+XUFxOllPvQQw+tXb169d5169aVgci0JPb0Kw0Wmf2fXUsOEeNGJmCyvsswDM007/QMardUxJUlZc1t5bpuBB4EOw6PIAikUrUgerVapd/NiA0QfS0iAHFqtMTTTz/dX6lUXpNyKX8MYE/a9Z6pnE6AfAq1mXOzSrmrq+tvX/3qV//DwoULxwE4N9544+Ybbrjht3t7e2fTDx8LEA0XI0ovncmtCtSnRjBwoM+o3chxQ3eNq4uTiI+uInDQjaiL6K1GWJaJgYbv++TOEtVqVVSrVVmpVGS1WhW+7wvf95XjOE4+n3c0ZBQA1dHR8Yzv+67KmC9SqVQ2/vM///N33/Oe96xua2trn9nlp8tLei4RHvXX8Sg84iwQIAYethKninYZ1aV9uRJmSsmGh/nOy5hSN3UlC4rzcqUaYhN0PUy7jp62RPcxEiC3+8j7QgpeRt1YkXOkNuha6HvOuLj4f618oRWn2RaGoWpvbxcXX3zx048//viSarWa6lqRUnr333//2vPOO2/38uXLK+zacDCY66PLIoCgayaEgM4Joe+KT4Cop4KJwIMBmJ43HjsyQm4rsvhZgFxJKSPw0NdZktuqdgvUdUqc1aFqIwkbrJBDhw55w8PD70i5jM8A+EnatZ6pnC6AXAsgbSQBl10bNmz40JYtW7Y7jqN6enrabrrppmte+tKXvm0OEttSLRDFpiZRdT9tw2gr1N+ebMujARgaChwaZjt91sMBqcy4sch9RfCg7/Q25Pu+0K4sskLIQlGVSkWUSiWllKLpUcj3+rMgCAKl1EuyXLTR0dHNP/zhD79x4403XuA4zkzWlWd6LHaiw0g5UyamHFF4xCl98HLU4QM0vrE2WBf66TddiHYxHh5cLHjYdcHKDTyob8qCh9RDkBWzGMAgwvtsCb0l2/1rcJvpW9RYI47jGFcXU76RN3Nqm5ppa2sLL7744ie3bt26QrtJm4oQou2+++4759WvfvWz/f39ofV70eGoLOLWos+k+C0Ammvoui65oZRi8CCY0EgrggQdSwPDZJjrlzQDDw2NCDxstxUQfSmNszronrQB0t/fX9y2bdu70FxXHUItqXBO5XQAZCWAuwBkelP1PO+Hl19++Z8tXrx4AgBWrlzZ8YlPfOI3ly5dugVzMAggzY2lrORA1N1Vkf+wRmRZ8IhYJzYo9M1MPlPjruJJhBSkIwuDRmMRKHzfFxQbIWtEWyGKXFnValWUy2VVqVSENsUBwFE1dxby+fyuIAgmlFKZhlUfOXLkoj179nz7mmuuaeafbSZK1RQ2EA+PiEuJK2cweNAfVzq8DUsZNbh+WFmSa8p+AzZtwnJR2YqZlD5i4GFPZ0L76WtjzoPqSms9cxsedEwbRkz5KqUiEDHDdDkUeH+YgqXN3OqIanCdiKgVqGprawsuuOCCp5588smzgyBIhUgQBO333nvv0re97W3P5vN5cyx2LSTvOy9jgFUAePyC8j8ii0BxeNALHAeh/tEMKDg8yH1F8CCXF495VKtVFYZhBBpJAJExMRH2gKC7uzt86KGH3ozmI1YnMQ8z854OgNyO2txWqeJ53p2vfe1r/6ZQKIQAnAsvvHDBH/3RH/1OX1/fKl1lrkaRxbVLN5sBCLRbygIFd2NF4CFqr/hSspFW2j1lWx60n2KxDrONoKFvUoKH0DezAYbQsRCCB3NfyXK5LIrFoiyXy/ScAAA0RKBqgWLk8/kXgiA4oZR6aYbr7Wzfvn3DwoUL77nsssumOuGlUqoxr4MrYl4OCwZUZpenwMMcUzEYoF45th/2MUn4SCkwkKhGeBjFxqFkKrM29LWxlXgEPjzHJaq/G6wfabfB3DMcHrDrSylBcQFyfwkhHFVX2EbhKlVXuqTMqSyXywWbNm16ctu2bavDMExNRi2VSj0PP/xw5zXXXLObQ1Ef1+RscHgoFVk4i54zY4VwK4POh8ODgcUEyekY+llXoZ6ynSwNfX4GHjzmUSqVjIWbBSD0XSUABAB++tOfvgrNZyNvA3BL2vWdqcw3QN4I4ONZKuZyudvf8IY33NbW1qaklFi/fn33Rz7ykQ90dnaa6cWnGvSegthtmpiFYpMjKmZdAGaeHaP8pR5tpbRFgfrcV+YNh4LkVI+/AdE2MoW1n9UEznnwnCwOeiMi11alUqG4h6xUKoLcWcViUZZKJZr8zXFd19ycHCJKKbS3tx8IgmBEKXVxhmvn3XXXXT2vf/3rd5999tmZhxKqGHjAsiR4OQODcTXZyYJxyhlReBjFSkqVlcf2wy6z+wFrRBa1g5hYDCs3dRkYAMsVRn3k8CCAsDoNFgavz9vgipPqkmK1YcCH/eoKPJBvYiDQ1gspXraPabO9vd3fsGHD1qeffnqdECJ1uYDh4eHFu3fvLl999dVH6RoTPDgw6TjsvE0eBs+g5zCRUso4eOjflmeXm98yzm1FzzLBg2BTKpUkP5ckgMgpjsR65JFHtkgpNzW5bD0A/hJAmHZ9ZyIz8VVPVRwAf56lYldX11++6U1v+rLneRIABgYG8h/5yEd+q1AoLJrTHmrRioTEQEJF4SFIuUPHOKguWRC6DlkePNgtaX9qi252fRMLmnSN3FFhGFIcRVCcQ4iaK0tv58N5KWgugiAQlUpFEDxKpZIsFothqVTic+UoIPqm43kePM9zCCa9vb33e573zYyXcPGVV17pHT9+/HiWykyZNrUwSEElwIPvGweJiGLmSpuUql1G/eAKn8rsfrDjge1vx2SywENJPWUILHjQMe1yDg9ZtyaNW4mVmzZseHBFbwOFKVhTRvWYco0oZa2IjVuL7SuVUqq/v7987bXXfiaXy+3Pco/ce++9V3/xi19cAe0atnNBLHhIep6UiiQNRvpMDcRZHhTnoHPRL3SKBqaQ5UGgsOFBlkeWc5uKuK7rAEAulzuaofpcLLQXkfkEyDUAXppWqb29/darr776R7zs4x//+K/09PSsStpnDoXgwRV9qNhwXLAYCLmbdP2QPuub03ym/ZWGCG2g6UdYQqEBB1kfLGmQoBFSwJxA4/t+WK1WZalUMvAol8uiVCrJcrksKpWK9DxPpZ2853mKQ6Snp+eHjuPcmeXChWF4wYUXXrhDShk0q8eUaaIbqv4xdiRVHDx403Y5p0GDG4qXAY1DeYHI0NE4WHF4RPphg4gfk8GjYRgurwcLQlpZRdpQqmG4rek7A4G5TryMFL1SUXhwZcsVsKwH8SOWh1LKKGDqJ8FDW8hqcHBw4o1vfOOnHMcZzXJPffWrX/1/fvzjH/epOhA52CLTthM84vrMz4devDg8CBYcHkopxaz/VHiUy+VUeEhr3aCpSHt7+1B6rZ8fgDgA/jS1kuPc+4Y3vCGioN773vdesnTp0kTXiWUtzKbwSRC50idA8NFVEUtE1QFDgCCgRLLPWQKhgYKUMmTAMNssuIR6VIfQI6rIChEU6yBwVCoVEYahKJfLguCRcL4NVoj+roCaW8txHNXX1/evjuM8nOUCDg0NXXXdddclTrtAChgx8QTapuojm+LgoRLg0RC7SIAHtW2UMe8Hhwd3b1nw4G1Itj1yvDgY2P3g8KB92X4RqLDPVA4wGFBb7DyMolX14LeMKTN1ecBcSokYRWx+FObqAX0nxUtAEUKA4EEKeO3atcMXXXTRpwBEV0yLESll2yc/+cl3Hj58uI36TtcADB7awjfX14YHbWNxSFOWFR6ASS6cFjySxPO8BqgEQeM7WFdXVxbrfs6z0ecLIFciPXBeuuCCCz7LCzZu3Nj3yle+8hqgMQ9jLkXVlTy3POzYhyRIqFpA3YBCA0AKIUKCkH7QJG1j8DCTIhIs2NBc484SLO4RhiFBgyAiwjA0QXINEVEul2W1WpXlctls5+cZY4XEQiSfr42U1hAJ+/r6vgTgqSzX8vbbb7/6jjvuaJgZlBSwfsipyAisvI4M8IiDRKwVwZR2JG8CFkzA4MEVOfVDsoC4qsODrqMBHrXNj8/2Aftu6sraRIWR+rxvHB40eosUajN46HYj8ND70QlRZ7jbKRKM1mWx8LAVL4uDmOGvBA+tcNVll122a82aNX9F918zKRaLiz70oQ+9SY98UorBg54rxeARY101wIPOIwke5Fng8KBRVvQ/DENUKpUZwWMqsnDhwuEM1TLPAzhdmS+A3JhWIZfLfWP16tUTvOz666+/2vO81Bk9Z9MKYR4lnt/BrRACR0j1CCQcDhwchkZChCwwTq4w8ntx15RxhwlRi5/QKCuyPKSUIQXEycIgeJBVIoSgcplkeWSFCH3XEPH7+vpuA3AwwyVt/+Vf/uWFR48eNctsMhAoZb2pk9JX8fBQKhkeca6m2HKVDA+udOtmRCM8DKzYtkgZA4EdRzFKX1nwIGXIgaQsuHB4KGad8bdxa5oVAwQCB1emBDwOD610+fDcSAyEd4qsCyrjipf6QIqZu34IHqSEr7rqqkcHBwc/n+F+wv79+7fcdNNNF/BrpJ8rcw2VisZoLCtDMEstER76My0EFYEHAYWOSzM/8H6qmLn1ZEa3VZzVwaWrq6uSoZmeLMeaicwHQHoBpGVNVjdv3vyfQB0GGzZs6F61atUr57pzXMgNpW9CgoexQkjRU5nU2eccILCC7gQIsmZIJAuGk4tKw0NS3EMIYUZWaRNaVKvVkDLNybIgcLA8DwOPUqlk4JEU98gYDzG/jeu6cF13sqOj47MAqmn7SinXXH755dsRHVGVKd/DgocCYGZHRXNIxJZTGWsvCR5ArRJ3NTUEslkZqCxmG7VJ2209bJR5DDwoKtwAD6YQbXhIVl8qpYzVIWVkVJSxRMDgQcem/AYODt5p/p9bF1SPB59rOan18+Dw0H3CG97whrva29v/Pe1+AoAf//jHb7/77rsXqhh4UJ9Z3809Q4+i1ML7b8ODWx02PHzfbwqPuZbu7u5Ulx9+TgDyK6gtTZsonuf9y9lnnx0h6tvf/vaX21nmc+nGIhioeozDhkcEKNzyICDwfev3qpBkbVD8QtZdXLRvqPeNuK8ILL7vh1JbHDqnQ/q+L4QQIcU8yOrgo61KpZIMwzCyMlkWWCDBCnFd1+EQKRQKR3O53BeyXN+9e/de+ed//ucPgrmgkDJkl5QtL2efFavTFB6wQMPbYArchkdEkVNZHCCob1TGIWHVBzumtI5tFnZiitYofeoPYkZ60XY+nJeDRh+IoBIXAyGFaqwOSwFHEguZAuYuK3pDj8RACCy6DRkHD55097rXve5LrutuT71BlXI/+9nP/sbBgwe9OHjYVgd7STOgoPNJgwfvJ4cHua3mGx4A0N7engUgmddjma7MB0CuT6uwfv36hreOlStXTimbeSZuLBkdURUHDzswTqCgHA6paoAwMOEuKL3NAIN9lmEYUp6IyeWQ2joJwzAk1xXBg2Ie1WpV6JvbuKzK5TKHB51TpmuT1ZXF23NdF93d3Y87jpPprfFjH/vYufv27TNj+W2lz8s5PFBTjkZ5Ih4eseV2GW+TQYAraWrHhgfVaQoP3javT21aCt7ub8Qa4/WZgoz0jV2nhrZJwbNyUvrgAXJVt364aysCFN1+JKgeBw+uiCn+IbUbi8ODymkUlFbQslAoVM8///xPARhLu58qlcrARz/60bfTNeD95/CguAgHhcOmY6e+JsEDLOZB8AiCQJbL5VmFR5zbKi6o7rqu09/fn2XJ2rmYITvalzluvw9Amhtq+6ZNmyLD+NasWdPR39+/Oq7yLFshisODlL2qBcVDZVkaKhosj1gkLO5hrBVqzxIJICR4CJYkqL+HFCyneAYLpIc601wInWWu57IKNTzk5ORkqOGRCIApuLIibVgzgxqI9PX1fQ/As6kXW6nFr371q/ciBR5gSp6XkyJPgEecCyoWHlQWA4+IggaLl1jwAO83hwcDB9WnupJts+MvBkBUxv8InjY8qB9g8KDt9Fkrb25hSAsehiBc+XKgAPWJFLVC5m/s1MfIWzzBI6zPIWWGvEpmdei1bhT/v3r16pNLliz5M7r/msnRo0dfeuutt54X0/9IsNyGB3e5TQcevu+r02F5kCxcuDBLDGTOE8XnGiCvR8pJdHR03KlqM1Oam2Xz5s1nTadvU7RCVAwUIi4rsiYIFvScSRmNgVA95o6iwDjFP4zFoXRyIMFDwyEkQAhhkgPNsF6KlejRVmEQBJEcD7JOSqWS4JZHs2szXYjEtel5nt/d3X0bMrw1Hjhw4BduvvnmbWDK3IYHV+iIiZfYkEgoj5QhAR4MFEZZW/0wyp3Bg1sKpm0LPvQzGOXO2oP1vQEepPx526yeiYGQAmd9NHEUUvp6/0jMhFsf7DtBxihgABHYcEWsoWTqJMGDFHIYhoiDhy6TtDYNALzsZS97urOz8x/S7icAuPfee6/btm1bVxo8VE3R8OxycmWZRN4XAzwAoL29fdoel9mUuQbIm9MqbNy48adtbdG1pAYHB6e8muBURD8g3IoIGTxMAiDqOQqRUVaoQaMhlkHgoTJ2k0oCDINHSFYH+zOrCeoKPDlQkL+1UqlEhur6vi/K5XJgZZcbIeU/lxBpb28fKRQKmeIhf/zHf7zm+PHjJQseQDI8mkKClUcUvA2aOHhY+6fFOoAYeLB2jZJKgIeJdcTBKQ4ePKkQdcslCR7UBxsekdgK778ND32jmmtEnwkQfLuozd4shRAmPiBqQ3lNciMf5kqKmRQyxWxseJC85jWv+Y7neQ+k3U9CiMLNN998faVSMb63OHjw7yw2Q2vtZIJHqVSaVXjImFFZWXNBADQfqjUPMpcAcQC8LqXOs+vWrTOrZpEy6u7ubuq7a+bGymCFkDURsSLYd6mUClEfTUW5HEIHpI0rSvtWbaslAg/bOiFY6DL6bqZiJwuE4FGtVmkeKxquG4ZhGJbLZVksFinmIarVqn1T27CIvT5ThUgulzOZ6fyaO46jurq6nnEcJ229ZkgpF1177bU7LXgYpWmXw4qLNIFHLGh4TgSDQQM86t1rOpIqAhQbHvq7aYe2sTYilgjvP2sHiIGHqgXEjeLn523Dg/U7AimCAYeHrhOBB5VRfebiiVgXBA+9Deytns+FFQsPSsCLg4e+B+Wll176NwBSk+ZGR0fP+8u//MuXsz42hQd5A+iz7/umj9Dw8H1fsYD5GWF5kIyOjnoAcinVssRJZiRzCZDNSFkaNZfL/VTFjJUul8tZ/HtTFlV3RfFht3zIrZRsNJVVJzKUVykVKp00SLwgUDCgkJBrqpZCzhIGOTw4RBg8RKVSCcMwDMni0MG70IZHW1tbrNInmQ2I6Lda2BChdnt7e+8AcCLtt3jwwQcvffTRR09yBY/oCCsgBRJUV//FgiYBHna7sfCgtuPgYUHG7g9X/LZbjqYjaRhhRfBQKjKbrGmaA4L2o88cCPy82PnFwkPXjYUHlekXIe4eUwAahufGwcPOmcgKD5KzzjprYunSpX+BDPGQbdu2vfPee+8d4BBJggf/TIF92/IIauvlSL3swWkZbZUkJ0+ezLIcxpwvaTuXALksrUJvb++T9JncWI7jqPHx8YnEnbRM1QoheJCiV/XYBwW8E+GhLQYqj2SXs/2EHlFlrAjJYiAEDBseSqlI0JwsD+66ovgGn56ETc8euannGiJkbQDxEMnlcpOFQuGLCT9NpKvXXnvtmDWjalNIxJXbyp2Dxs7GRjw86Pwa4MEVMe9HDDzAtkfgwT+ruiXSdHgu349dk1h48HK7z3x/7qri8CBFS991WQM8dHlEIdN3poSpfRPrENaw16nAg+RlL3vZ9nw+/09p9ZRSuW9+85s3kCsrDh6+70spJY/LUN8i8JiYmBBjY2PB5ORkUC6X6fqeMTI6OlrIUO1FbYGkAURecMEFO+M2vPDCC1nS9DMLKXilGtfyIKgoyzKRUobQM+hyoBA4VN3CMDkeVBayWXelbJgUUWrXlZRS0hoeJmherVYp3yPUiYJm2hL6T8vThlaOB0kMRDLJVBINraTCyLbu7u6fOY5zV9rxjhw5csEXv/jFQ1kgkQUeTNk2wIOYEQOPyJu6ZBMx2vCIUc7GYrDaibikUAeAcUFxePByILoOOZWT0qe2CQZ8Rl0GlwiUbXjwchseWpEa1w5tC628Cf0ZcfCwLQ6Ch9IxkanAg+TKK6/8J8dxdqfVKxaLG2699dZXJMHDcRyTIMnh4fu+GB0dDUZGRqpHjx6tTE5OBqfb4miWjT42NpYlxyN1UMtMZS4BcknK9u2LFi2K3ERkhTz22GPDlUrlZNoBsgzp1VaEcVEpNuqKWxkWPIxFQdBA1FoxwXN9I/Icj1DqoLz+aqwbAot+CzJ5HVSJ8jsIEHwoL8vzCLNkl1uSyQpp1p7neRQ05dff1LUh0tvb+z1kuIE/9KEPDVSrVQ6Ahrf9pHJY8CBh8ABi4IE6OOLgYcdQYuEBy2Lg5cx6iMBD/49AhpcD9UkMeRvc6pAykkluzjEJHrw+tzqoASGEcl3XQIIrXaljIDY8pI6BcHjImFgHzzKfCTwAoLOz01+7du1fIkPg+Nlnn/3VrVu39jSDR6VSEePj4/6xY8fKBw4cKB48eLA0MjLiF4vFab+1y5iAuJrBdCbNpFQqZbFATs30OGkyVwDpAtA0EdDzvB1AvBJzHEcNDQ09M5MO6HY5PCJDdgkcZCEwK8TkfxB0wHJEGGBo5FbIKCHoPxXpv1ADg8Mj1ImDJseDwEHwCPRaHkEQmDmtisViouXBZbquLL0tESJpLi0CSS6Xm8zlcl9P62elUll60003HbEhQcovqRx1eHD3kQ0PqhNnudhK39RvZo1wRW7BA4iBByxIxFkoDDQNALLrc3jQucXBg8p0Abe8ItN8uK4bWfuCtkmWKKhFCDbCyoaH7kcDPHSMxMAjDKe/vtFLXvKS/d3d3anzZSml2r/+9a/fQP3XIxf94eHhyoEDByZ37tw5tnPnzvGDBw+WRkdHT7ulMR0plUpZLJCR9Cozk7kCyEuRnv+xK66crJCHH3740SwHamKFNORrIAoPM7pKRd1XkuChHzwDBwKEYsH0oLZ0Jd8mg9qkiCa7XPuBJbVBcPB93+R4MHBEssur1apxZZVKJRpGHJEkhT/bENFKqqlLC6iDpLe3dyuAPXF94/K3f/u3iyuVihl9FAOPSDnqeR208FIENNbnOMulAQaIgYflBotAgpQ+swLIIojAg4NASqlc120o5+dmw4PNBByZAJFp9QZrjMODWx3MDSYBGHhoYESyzEU9IG6G51IZ/SdIKB00J3jwGIhSyoxeCnUeSNr90EyuvPLKuxzH2ZZWr1gsXnzTTTdt2rFjx/DWrVtPPP3006N79uyZHB4erjZZ0uBFI5VKpdl66CQvWgtkc1qFhQsXPk+f4xTYnXfeuX94eDg1u9kWrWyMBYHako4mrkEwYZDggfMIPDg49DbzXwhh4CFYoiBNRRLquaw0MEKhM8zDMDSTIVIblF1OcKlUKqJYLAqdZS7L5XIkuzzums01RGz3VRJEeDue54nOzs5vxPWLSxAEg5/85CeHwJS4BY+IIgfM7yxZmQlmM4lYLgwkpjwGHqoJPOgNPzIlChrhASTAIwYQ5jhUziEhtdVhwSOyDxgsOTykbJzbCmxEVhw8eHCciw0P+o3i4EEWCMFD1qyWpvCwc8Ga1BMbN268BRlcWYcPH/7Ajh07cuIMC4DPhkxOTqYuBQzg8Fz3Y1tJiMsAACAASURBVK4A0mytXgCQ69evTzw5upl+9KMf3Y0Mw/fICmHwaHBXKWsiRF0vsiiUlFI4jkNDc7lVYWbUFXpIrtYkHB6RfaTOSNcgITeVmQyRwSPUcQ7h+34YhrUcD4JHtVql7HJlJ/LNBUSS2ox7+ONcWnY73d3dzzuO8yO7ji2f//znl+jRM9zCaLAMdHUaCmu7srjii1guDCB2IN2GR0MAPgkeDC42PExdasPzvEg9poCT4CEJHnRMGx5KRadut+GhDxIZ0gqgwWVFQmX0mYPDhgcPtvNYRxw86H/aPZBVzj333MMZs9R7H3nkkXfN1nHPJAmCYHGGalmWW5iRzBVANqRs3z8wMBDxPcW9Af/Hf/zHC/v3738wywGVUoqUv9KxCYICtBUCHQgHs0DIqIAFEoIG6omDDXNgyVpioHFx6Y8mq5zgQdnl5K4ieFDQnKYyoeRAmp6ELA86RaAxG3y2IRLXZlpyZhpIenp6/hN15R8r1Wr1rM985jOnYFkdXJHrqnaQG03gETtCKwYeQDI8eGwhER68fzY8qI4Nj5jyyLTr1FVEh+xG4KFhwfNBIsATIjIPFoGgwb3F4UFiw4NcU9QvDg8e+7DhQRbAbK7b85rXvObfHcd5Lq2eEOIdP/3pT8+ZreOeDonLTBdCrEjZ7SSA8tz0qC5zBZCNzTY6jrNHxYxO4EJWyM033/y9crncNBO1fr/Xk/iUimSZS63wJYGFQwBsuC4Nx6V9iTAEDxEjBA+KefBhvDofxCQKhjURZHnQhIhkdbCRVnHLz845RGyXltRLmSZBIstxOzo6jmcZ1nvrrbcOamUTB48Ga0TVXVaRILkND9TdNg0jrLiyTVqkisEDdjn1j47DLAlTl+W6GEWeUG4C7bw8Bh5Kspl2+XYGDOOeonMULAYimXvLhgflRNjwYK6tyEy7NjzIXcXhMdvS0dERrl279q+RnuvgHDp06Pd935+/JU1nIM2G7nIRQqxPqbJ/5r1Jl7kASDeApnRsa2vbnzT6yi4bHR2t/tM//dOXhRCxNCU4cHAoNnqKtpO7isGEu7RMVrmqWy5mFBbBhTODrAipR1dRcqDSbisOjzAMafVAAw8NDkkxDwqW8yTChMs3pxDhbTuO06AAskAkrk5PT889SLFCyuXy4Le+9a0SGmMWDa6mJHhwOJBSV8xCseGDGHjwehY8pFWeCA8OAhsSVjl3TcmkcgseynEcweChODy41cHhwYFC9ej9iLVhJhm0h+dquESyzOPgEer8jyzwmIlVsmXLlr2FQuGbGapu+sEPfpA2rdKLRsbGxjwAq1KqxebYzbbMBUA2oDYPVqLkcrkDWRoiK+Tee+89cuedd35J1eaoMsLgEcKazwoxsQ1yV+k/WlLWjpPQA8VzPcg1FRI8aOgvxTtClihIMQ/9nQfPJU2KqLPOQ8osL5fLZJWYHI/pJgRmuK6ZIKLH62eOfTSr09HRccJxnLvT+vbpT39aKaUohpIED6PnOWS0om+wRmx4wLJGNDzqCSMMEuz8G+DBIcUUfwQSfFhxQjn1JQIPdn6RgQCybllEpi3h8KDJHPVzkDhtiWBTlGg4NAzP5UF1e4RVVnhkDZBPR171qlf9K4BjafWKxeL/3rdv35yv0Dcf8uijjy5Buu7+2Xz0ZS4AsjqtQk9Pz1EgOQckruz222/fdc8993yZIKJUJLeDQCKljM5dJbWLyoaGBQ8DDQIC/09C7VGsQ0Mm4v7S2yJ5H2Sh6LgGTVkSUhY6rTBIYOHnngCRGVkhCe1Gvvu+z4P2iSBJap/Xob+enp4fIsUK2bt374Y9e/bQiDMDBNQhQUCxR1glxTsi8EF9dJQND3vUVYN1Aeb6seHBjpkICSoHg0ECOEw5tUsxjjh40P2rlbaBBCx4cMgQPOgcODyoXSrT2xuyzMNosqCKg8dsi32P9/f3VwYHB2/NsGv3Y489duMcdWteZf/+/WnuKwBIjQ/NhswFQNKCO1i8eHHq7Jok/O3l61//+o7vfve7fxeG4TgpfNThwXM9uHWhnxmTGEjbJIeHtipM/INDQ9WTC81oKv3GZdrRVgdZG1JPSRKZjt33/VAHzWk0VlgqlaTv+6JYLDbMa5UicwURxTOFeVwE07RGSLq7u487jpM2Pbf7Z3/2ZxOwLAmmTI1yRww8yHLh5aiP6jJKuRk8OIDQCI+Ie8xS/A0wiIMH28/8Z3VT4eG6rqlvw4PvzN1bVE+XGxAiBh489qFB0gAPAkczeMxm0LyZXHHFFVs9z3sorZ4Q4pfuu+++LMr3jJbx8fGXZKiWuizwbMhpAciSJUvMCoRTsUIA4I477tjzpS996W8qlcpxWAtByWhiYEjPlo5NRKwNyVxW5KbS+xhLgrZRvgfFPKjNkCUK0ogr/SARJEwdmpZECGEmRCyVSpLiISFLELTPv4kra9YhEgRBw1Be6xjTdmsBQEdHx31pdX7wgx+s8X3fTsZrsAzi4MGVMClgGR2GS/BQSfCwAUFtxMCDdyQCDytArlg7EahYoImU0zxXHB4EBiojFxQS4MFjHwwKJgDPg+QEDw0FfrwGeCilaELCebE8monruvK88877PDLkhhw6dOgPi8XifCzlPWcSBMGWlCpjAGITtWdbTgdAxjKu52vE9qH+5Cc/Of6xj33sM4cOHdqq6lOKGHcVwQI62xwwa3sQOIyFQu4mxaZflzrhkGIdjuMYeBAsQjanFc/zqFartI65kFLSxIiyWq0KpRRNzy4mJyfNWh5hGMo0CMwGRJoF1oUQCGrTWcfuT8doZo2kHQcA+vv7dyNlfHoQBH3/9m//RplzqfCg4cIMAhwecZZHZP+Ydm14mLoWPMyoJA4DGx6whv5a9e3PZmoWCx5m1BSHh3UeBh5ggXOyKHSdyOgtgoduj0NGKaUapmNH7eTVXMBjJhbLxo0bhwqFwlczVF3/wx/+8E3TPc7plkOHDhWUUk2niQLwKDLkz82GnA6AHHZdN7IQylStEAA4duxY9aMf/egdP/7xj28PgmBSWrkcqh4PIXjExT4iOR9WrIPmnOLrlZvPQRDQuh7C932zFC2NuJJSUqDcTIiol5yVNNqqVCoJcj0A6RCYKUR0nYYyvUaDbDbPldUGP+5UQaJyudz3E87DyFe+8pUqKVxEEwuV4ziSpjDhiXSw3Fs2PHh9rvzBguoZ4GFbIzacGuAh6xYIwcMM5Y2BByUNSgsePEBu2uDw4C4rDo8Ya4RPsGjmvNJ/ifAQLFGQ4EExlrTfcz7kiiuu+DdkyL4uFovv271795yuejpXct99921C+lrnj81HX4C5AUjTRaQcxxkCAD0nUGbh64WwttQ3v/nNZz/5yU9+ft++fY9zeKj6kN7Y5ELJ4iLM8qDvUupYCeVtyFpAnVxcZJ3QWubGWqHhvJTjUSqVjAVC4NDZ5aH14M07RIQQ8K2ZUdPmuWL1pgQS3m5fX98TAPyE8wAAPPXUU2u165DDwLiZZJOJDu0yaoMJj3PEuqaQDI8IfGwYsO2mDVZmYJDQjkkaZFAy8FD1UEbDAlAcEhwedE5klRA8pHZfMcjIMAxNZjvBg4CSBA9aIKrZb5l0D5E0G6U1Faukr6+vumTJkr/JULVz69atv8kLpqqPTpecOHHi0gzVMiVfz4bMBUCWNj2g6w7FlWe1QuLqHDhwoPzJT37yh9/4xje+cerUqf2q7p6SzKKwrRDuujLAIUtCMheWJopglghll1MdCpZLKWVkRJXO8wjK5bLQfyGNtIo5v3mBCPm0k94cs8xzxepmAgm163meyufzk47j/CSpnu5jz913311BMjwSR01Z8ACVI8a9ZcODjjMFeJClQEF5E5jn8NAuNrs8YtHAyjhnVkKkDQJGjDVC+wiCB7MQDEzj4CGEgA0PO8uc4MPh0ew3BOZ2CG+c/MIv/MLjnufdl1ZPCPHme++990UXUK9Wq1enVQGQuo78bMlsAyQPoOk0w67rnqKbajasEC4PPfTQ8Y9+9KPf+fa3v/2dkydPHlAqNrjeYG0oZoWwyRAltyhsYMia+0pqmJihuLSeR6VSCShJsFwui0qlYjLPgaaTGM4ZRKSMZgc3i1U0m54kof6UQJLP57cmbSf5yle+IoaHh13U4WES4zgoOCRseNBQWsS4t2xAoNFimBI8wCwaGx7MgjB9BAMG+8xBEJmBlywLcnva1ghzUUWyzKFHWilVH2FFkCF4gM1rJepxkQg8aHoS/ZLU9NmdqVXSTNKgdOGFF/49aoq0qRw6dOjDk5OTae6gM0buuuuuFQDWpFT7KYDSPHQHQLovbaqyCMAfNKtQKBT+a9OmTS+4rkvz/pikQz0poj1HVqRMK5BImV1n3759E/fff//u0dHRg/39/W0dHR1dtV3NiCs+XNeeDNEkChJcaMy7fmMzM+jSyCraTrEOyibXeR9Sj7aitctNP13XpQkg7cRLBwBtayjn+8vkxWkcal+7H0ihRtrRdRITP+O2O44T+1tRfXZeiX3P5XITxWLxf6DJS8yxY8faN2/erM4555yK4zg0oWMDPEixkyLnSYhJFgrtQ0N5qQ7bZoLZNlCS4EH1uIURBw8ahmuXU/Nx8ED9/jXWmIxxZel2JcHDdV0RhqFyHCcyPJfcWEIv9iSEMNOvW+4qAw+nthwtrR0euR8afmxdRuvDzLQO/24vXmbXGRgYKO3bt68SBEGau2fg4MGDQ5s2bdqTcOzY8+THj+tf2jnYZfZ2z/PM80MvZUop3H333W8Kw/CVzU8JXwTQ1LqfTZltgKwA8P5mFQqFwvc3btx4GKjBwHEcW0E1XG2urAg8MQqsYb/Dhw+XHn744QNPPfXU7s7OzkpnZ2dHW1ubp9gsuooFzAko9JnK9UNkJkSkdZVpFl1RW+9D6CxyygOR2mUlw9qytNI+F6B2YyQoY8dWxHH1mkFECOHoN9PE60ltNANJ0vaZgMTzvGBiYmIFgLPjjgkAUsrOSy+99ITned7ixYt9sPwOXcW8sZMSh5UoiCbw0ALEwyMCBQaPiNL3PE/GlbOyBnhIGV0Yig0/tuFhXFZUxs+D4EGAEGwtc7I8bGtEWPkeSqmGUVoMHma6FP3XAA92P8WWzSZASKGnAQQAVqxYsWf37t1XAGgaLA+CYEtPT8/3BwYGKs2OHddfu06SR2W2APLAAw98DMCCZucD4H+jNpHivMhsA2Q9gP/VrEJPT8+/rV+//gRQh4FKsUJoE32g/XhZs/3K5bLYtm3b8AMPPPD8qVOnjruu67e3t+c8z/PI2mDWCcElsq65dmXR/FaRSRPZsrNSCCHL5bKJg1B5s3OZTYjo+Aa9Jau4Npq1kwSRZtuzgCSuD5VKBUKIVyQdDwAGBwf3dnR09K5bt66sl16NWAwEDxkNfMe6tyxw8Dd5E2eJgwcs+JDVEbe+R8zxDcCoHRseZA1YEDGQgA6Cs+MZa4QpfjPCyoKHGYklrMkQGTwMBAkeVEaWiXbXZnZpcmU7G3Xs+kl1SPL5vBgZGdk3OTn5hrh2edUjR470XHDBBT9tdmz6brvPmoGgWflUAfLd735348jIyLubngnwDIBPpNSZVZltgJwP4FebVRgYGPjWmjVrzFrZ07FC+H5IgQiVEXSGhobK27ZtG37ooYf2Hzt27LiUsuI4jmyr3RlmCBbFPijmQQmBUkpyUUmyPPS6HVJKKSqVitQz60paojatnzOBiHZB0FKjiaCIU+LThch0QGLtCwCQUoaVSqXpmHwp5f7zzjuv13VdtXjxYr8JPEwZKW9YI6+4JYIYeFjAiATbOST4qoK8nB2oAR60ibulmOKnBmRMGVkuxhKwIUMNSlkLiuu6UDrOoa0IqVR9OneCh7YoaFr2yJBd+q7jgnTjpLqvqJzFLGdUx/5sWQCJ4Fm1atXQc889t1Ip1TRuoJTacOzYscfXrVsXmSFjqu6zLG6wtP1yuRz1CUAdIHfeeee7lFJpGehfAHBfSp1ZldkeIpFmXqGzs3My0oG2NoRhCP12VdM+tdEgiUqM75elblKdnTt3Tu7cuXMSAAqFgrtmzZqepUuXdvf29ha6uroKAKBBQcAwy89SYJ2sDnJt6aG6Znlaz/Mg6iNcnKQ+JdVD7YF1aHuo15TWyiVyTp7nKSFEnGI3bVI7fBsAWH1RQM0FlnRNm9WJa9PaFwDQ399/fHR0dBxA4vKce/fu7XMcR+3evbuwefPmCbC4hn7wIrEOWLkhHB70Bo9s8AAS4EGfbXiw9iRvIwEeHBYGHswaMZ234CEIHgQDsDmvaJlail2Qe4vq86A6HYKsEQ4PVZt5Qek53NRURlPNVgB9ukF2Lueff/7fb9u27ZUA2pvVGxoa+sjw8PANCxcuzDaf+jzKU0891SeE+KWUagrAP81Hf7jMNkAG0iosWLCgOF2lPxNYAM2hU6lU5LPPPjv+7LPPjpOS7uvryw8ODua7u7tzhUKhLZ/Pu27NiQ3K7dDrPZvRVmEYSv3ftD1diDBFb+IYsj6IIPY8mkEEqCl1GyJTbcuuAzQHCR03ZnflOM7TSqlXJbVfrVY3CCF2lUqljr179+ZXrVpVQX1CRmkpbSOojwSTAMDdTWBxESTAw4YEWR0x8IhYEmDwICgQPGAlIRIowFxbNjwcPZ2JYEmAcfAAIC14SBYbkQwexioh9xWNspIsqM7hkfTbzIaCnwvh/Tr33HNP7N69+x9LpdJ7U3Zbcc8997zz2muvzTI9/LzK/fff/3bURrg2kwcwT9OXcJltgPSnVViwYEEJ1sibOCskSbiiSwJCM/g0g4hdZ2xszB8dHW14I8nlcm57e7tHb2VKKScMQzBfsSnn++ly+7jmO7kJNHwULLdXnPKfquKn+lOBiO77tEFCbeuTjWxva2t7LgiCRIAAaNu7d+/4mjVrCnv27CmsXr26pKzANxBZXMoeOdVQ17Y6OHCS4MGtDQseUkoZCeInwYMsEBseUpo5rcyQqzh40PnZ8KD+8xFWdAwAPEhOQ6Ej8KD5z/hqgjq3SenfiH6LKQNjtiEznbySK6+88rt33XXXL6LJgA0AqFar737kkUfuveyyyxqy2Wcz0XAqbT333HNd1Wr11zJUzbLE76zLbOeBpAKkUCjEJtHF3RhZbr603JCptkd1mrUbBIGcmJgIT506FZ46dSocHR0NJicnaW3zSDYwG8FilIhdTm+W9jmh0d+sgOlPWRLXTlxbSe1NZfr2Zsfmf+3t7fvT2jx8+HAJgBoaGsrrxXTi4BGJWQA0hqABHkDd0oi1RKi+53lJ8DCWBMGDWRgGEs3gwfraAA8ppYyDB1kV7J6hk5QWPCR3VTF4mAWhuOURAw9hv1xkFfv5mco+M62TJH19ff7y5cs/k6Gqt3Pnzv9vYmLijMkN+cEPfnAdaov0NZMTAO6Yh+40yGwDpCutQm9vr7kz426KLHSe6Q2XBp1pth/74Nj10hII7T7a5c0gEnOsTO4Hu62k9qjNqa4D0qxee3v7aLPtAHDgwAFjYezduzfPgBB52weDB7c2lKovNAUW3JZWQJzKlVLS8zzb2uDwMGVOPVGxAR5UHgcPvb+BB6cdhwevzOFBdWHBg6wL7rYi1xSHB88y5/AgCzpuxNVsyXQgM1N5zWte82RbW1vqgmZKqfO+//3vX5ulzbme/uShhx4arFarN2SoeiuAhmHI8yGzDZC0O2LMi1kg3uwck6E+Eyskbt8sFkZau03an9UHY6oQietTFmuA2srSXpZ24+om1S8UChNp+x8/ftwhZbx3794CoiOseEKgpP+oxyJiR2MRPDgk6C9ueC7bWdFxHLZgVBw8tOKOwCQJHlRow0NbGpFJEWXMdOzseJKPuKK+ydrsCjxIbiBC8KC6HB5p9+BcyWxZJVyXvOIVr7gNwHjaPtVq9Tfvu+++damdnGN57LHHPox0nToO4PPz0J1YmW8LpOo4TuSY071Rklxg03FTZakzm9ZKVivE6uOMIHI6rRG7Pt8vn8+XUVu/IFFKpVI79Bv++Ph428mTJ3Ng81o5MXkgpPiTyrhriv0hCR68jI6XAA9T34YHG4UVC484q8OGB8U+yOXFYcEtDwYObo1Essy55SFldJqbmchUnsX5lFWrVo0ODAxkWb3Q2b9//5+eOHGi6cituZSvfvWrr1NK/UKGqp8HkGrFz5XM98IqFaWU18z0m8o8WXM9XHAq1gqTWXVlWW1NGyK63oytkWYgmQpM+H6O4zSdgtv3/R6t+CGlVPv378+T8nVi8kAIBoiBh+6/AQdT/tBtJY6wIqtDNk6KyNdilxwe+hQa4AFmFVEZWTTkpuIZ4nHwoHLmqopMW8Itkjh46GNgqvCYycvUTPbJYtmntffGN77xPsdxHs1wuBV333337/m+33TwyFzIgw8+uOTUqVMfyVD1BIC/mOv+NJPZBkjTiRQBjKv4BLQk/39inTiZC1fWmRAPsdpKhMhMg+v2PnEQoTrNXFtTBQmAyWYblVI5URubqpRS6siRI3l6q0+Ch1beNDpKUp+5kidrpAk8CDrGNRYHD72DKefwUNH8DzuobuCh80si8KCTYoMwIvCw4hyCgMfhYcdA2OSIEgBotJUGWKY43ExkroLsWcV1XbVly5bPIGU5AQAQQrzpjjvueCd9b9bn6cZD7P2OHDnS/sgjj9yM9MA5APwpUqz3uZbZBkguvYo+sHXhsgTU59qVNR/xkLmECG+Pb5uOSyvNGklqO+sxpiJKKScIgoCONzIykqtUKg70YlOyPhpLoZ77YUCBGEuEl1vwMDBgFkekPMFtZeCh+9AAD62zY+FBn9PgwawRyd1WsjZbr+kbbVdKRZaipSG7BJTZXop2NtxXs+36sp/B888//2hPT89ns+xbrVbf973vfe/ls9mfJBkdHW3753/+5z8BkCX+sh3AbXPbo3SZbYBMydw7E1xZcxwPmVeIzKZLK67NmYBkJjBxHKeg6nkeUErh0KFDea2ESbkC0WTCRHiADduNgQd3VcWOvFJRl1UEHmRJxMGDlVEh4uDBIBG3lofk8OBA4fCgzzY8XNf9v+y9eXgcx3nn/1b39BwY3AABAgQB3jcoXhBP8bAoiqRFW/Tajiw7iryxDtvaJHbszel1NuskzsZHbCeR5fUh+RdbjiPZjmWJ1m2KlETxJkiCJAiQIAAO7nvO7umu3x+YGhYafVT3dA8GJL/Pw4dAd109mKnPvO9b9ZYiiiLGqdgHgQer9eGk+yoTWQ2gq7Vv374XeZ5nOnhpaGjoKwcPHpxvZXwA1l6T/v5+z49//OOvYIx3MBRPwnjOwaRZQbflNEB0U1KkZJinfipcWaztTzFEmF0LdiBi1a1lByR0Xxp9mgUr46ksyunAQSgU8lGAAFBN6FgnBkKu0fDA+MbyXspVlY5TqOFBXZsEDxoaVFlNeKT6nwQPck0ND/XyXAIOLXioNwoq46vO0kt1nbY8WGQzpgh0HafE87yyefPmrwFb5lpva2vrd9544w3DnFp21dvbK/z0pz/9vxjj7YxV/hHGzz2fcmU7iD5pV/d0cmVNIUTSbRCxQsTKRkGNPnXrsYDE7LUnIMEYG8bOeJ6PcNRXe4wx7u3t9QK130MND2rCJ3MygAoeZIJXASP9M7VSii47CR4Y40nwINfJNdXqqknwSC2tNYQHTiVHJPCgc17RlpIWPJRUoJwkRqTh4ZT14cbqKyttWf2CWFdXN1JTU/O3wBbjKWhpaXnyhRdeWAHgXMzjzTffrHj22We/jzE2O+eD6ARkOeOukZwGiK1lb265sqxYMDcBRHQ/7E5bI6wg0SqvI8NjkAVBiNDwAACIRqN8OBzmQJUDSwseqTGQYLpmQBxuwANg4ua/SWXV8KDLU+4qTXiQ1VZqeJCKBB4Ipc8ImQAPIipwTpdLZ9ilMuoSV5aiBY9cU7ZdYXffffcZv9//NGPxYFdX17/+5Cc/+WCmq7NEUUQ/+MEP7mtsbPwPAFjMWK0PAPYDwwKAbMlpgPiNbqJxZQUERtem4ptUSm5CZNI9lriIHWtEqy4rSNT1otFoAZisOCkrK4uRiRrgxvrXvr4+T+r6pF3maPy8DoWaiCe4ngzgQUMj7SLTgAdJI6IFj0kHQ2nBI3VNEx70/g4aHqpVV3Sm3TQ85HEBSVVCnaA5CR6s1kemcvKz5bTr67777vsJQsj0iOWUuEgk8oUf/ehH33jrrbdmsY6DKB6Pc88+++ymp5566sfRaPSvACDAWFUEgI8AQIfVPt2U07kEmMiYetOrz6HACpVI0W4ZtawkXGRtk5QxSylv1Bapq1fWIL07gCrRIvmQaCVhpNsmE7zsYBJF8mEm9WmIqPvRqjc6OmpofQAAVFRUpLqYmDBxcHBQqK2tnbCUl8ADYGIqdhU8yISPIbXUl7RJJn3ajaUDj3QiROqGLjwURSEwS18nq63oa1rwUKjluWaWhx48yPOYvdZmfy+96266r+zEP1g8FqRMMBiUdu7c+eVXX331ewDABAWMcUNTU9PPLl269GJVVdWvd+3adcHv96sPjgOA8c/lG2+8Maezs3NzLBb7EJhY3FrdwXjQ/KDFeq7LaYDEMqlslI1XL2Ov1uSnvmYVIkZ11HVtQCQ9wVuBCMCNSVrdjnrMWvfotvUy8Wr0YRkkdBt6wKIVjUZNV7fMnTvXo4aHoigwNjbmUW6swsLUJDkJHtREngaCFmiM4AGUNYJSKUfIPRU0JsEjVTdtuWjBI9XOJHio93uQeIkaHgq130MND1EUsdk+IbesD7WseA8ybZNV1dXV4ZUrV36xsbHx34AhKSzpVpbl+zo7O+/74Q9/OIIQOi0IwhWe5yMAAMlksjSZTM7GGK8CgIIMhtcJAM9mUN81ZS+bGdxIjwpg7Zs++d1u2ne6rpMWhizLuK+vLzg6OhoMh8PFoijmy7J841OIcQAhJPE8H+N5Pubz+RKCIETKyspGCgsLJY7jhv9JjwAAIABJREFUOFaI6LxmZhAB+j4NCSvWSGocTCBR90OegXrNJpSVJGmrSXNybW1tEKjjaYnFMTo6yqeupw+SgslJDSeAg/wMGqCh9nCk3U00tAgcCDwAJh5RSwEnnSWXcoMpSiqHFQs8UnUnwIPs9yDPoYYHnWGXJEVkhQfL31PvutW4YSZyEzKrV6++LknSH1+4cOHbYHKWuoaKMMbbRFHcZnd8BpoNAP8dAL7nQtsZKasAUcspN5UT7ii962RCbmlpKR8YGKiJRqN1oiguwBgvAoBaAGt7XwAA2tvbAcattXaEUMjj8bT5fL62wsLC0MyZM3uCwaCihggAGJ1YCPQ4WF1apG1WayRV3jJI6LboiWxgYKACTDZN+Xy+Fp/PF1RurKICSMEkEonwNCgAJmbVBY1luLTbSgseRIha4qv+mZQlMQs1PFIWx4Q2teBBQKMFj1TbEzLq0hAk8CDXteCRHD81cxI8tDRVSRP15IT7yk7d9evXX5Uk6fMtLS3fAOsQcVN/DQA/hinKuqunrAOExXpwypWlV5fFldXe3l7c1ta2eGxsbK0sy5sAoILpAdkVAIDFGOPFkiSBJEkQDochFAoBAFzlef6Uz+e7UFxc3DpnzpxejuOQlbgI/byQgTVCyqgHbwUkdFvpwWKM+vr6tpvVW7hwYY+iKMWggkdqokQ45doCDXjQky5tddDwAOrEQnrZLgEG+ZlYJAbwSI8PVPAgq61SmmCN0PAgVosWPFJlJsGDrLgi8EjVNYQHyyIVM9m1PnLFfWUUI9myZcvlvLy8xxsbG78GjDGRLGg2AHwaAFjONcmasg2QSdl6c8WVhRDCoVCosKmpaX00Gt2DMa639miOaq4sy3Oj0ShEo1EIhUIRhNC7gUDgWHl5+YWamppBAM2J3QgimvezDRKi0dHRQlmWP2BWbv369TxowAPGJ3GEbwSzybdzABU8AG5k31XDIwWgtAVBYKQFD4Va4quGBxVPSacnIeUIOaiNgprwkFNnesjyxIy6anik6mvCI3VN1juK1mSyzQnrQ0/kMzs8PJwfDof9GGNUUFAQKykpGXN6rGvWrLleWlr6+KFDh/4i9QUyF/TnAPB9ADA9AiFbchogEZb+nFhxpY4d6LVjVBchhOPxuOe9995bOzo6eq8sy1sg+5srWRTEGO+MRqM729vbob29vYfn+UN5eXmnZs6ceamsrIxe/WbZpQVg7tYiZQCMQQLABpNQKPQAmCz79vl8ofLy8mBqLGSyT/fj8XhkUMGDAANUq6vUbqzUpJ8GRermpOA5DQ8CDBo2PM9PODlQDQ88Hgind45jGh6p11MTHiTuoYYHnZokVS8NFLJcl/wdzWQncO629UHei1evXq3r6elZFQ6HF0iSNDuZTM5WFEUz2wXHcaMej6dTEIRr+fn5LbNmzTq1ZMmSNmJpsABGXWbevHnDdXV1f/H888/vD4fDnwHzc8ntCguCcFSSpAYwnn8qAOCzMMUZeGk5nar4NwDwfoP7Zx999NHPkImfBoSeFaK2MOhyWu0YtUVfHxkZ8b3zzjs7IpHIJwBgpsGYp4MuCILwZllZ2fHa2to+juPIc056HVTQNX2djFZQmVmOeiBpa2tbGQ6Hv2xUFwBg+/bt7zY0NASId+eGl2ccJn6/X7r//vuvAQUIvZ9V7iyg4hoTjqPVgMeEOAkVSJ9wTQ0PYnXQS3a14JEqYwoPck0FDzkFD4WChwLAtnnUbA+R3t/FLYBgjFFTU9OKrq6uu2Ox2CZFUUr0xsAijuOGg8Hgu9XV1b9taGhopPvXcmGpx0fHUhobGyuOHz/+h8lkcm8mY1Ip6ff7D1VUVDTm5+dHWltb1yUSiV0mdfoAYA6YpIXKlrINkKZHH330MasTvxForLbV2dlZeOrUqXvj8fiDYJ67azqqm+f514uLi4/W1dVd9Xq9mq9DNkGSqo8AAAYGBsq7urq+DiabBxFCkS984QuXMMYIj6dbx2pLpKCgILFv3752AgeVe0rT6qDL2YEHsTjU8CBQYoEHGYcaHvL4UbLpZIlG8MA4faKgLXgAsKXD0bvOsu+DtWw0GvWeOXNm9+Dg4IdkWa7Way8T8TzfXV5e/tyGDRt+U1xcrLndQAsg6vjQu+++W3fp0qV9oih+ANg3AdLCHo+nKS8v70xlZWVIEIS09yAej3uuXLnypwBgZjp+HnIkFpJtgLQ/8sgjH0MIcVYmfrMyLG2NjY0Jhw4dujcSiTwCbLn2bwZFEUJvBoPBd2tqai4UFxdPoAYLRADYQaIuq9bAwEBpZ2fnPwDADLOBb9y48ejmzZsFPXhgjKG8vDxyzz33XKehABrBc6vwoCf5lCWTvm4EDwINck1RbpwmCKnguBV4pF5vJdfgQdfPBDSSJHmOHTv2wcHBwY9mam2wiuO44dLS0p9t3779uWAwOCE3n5aFogYIud7T05N37NixJf39/asTicQKjPEcUL2vEUIiAPR5PJ5uQRA68vPze4uKikYFQZBAx2XY2tq6KpFImFk5IQCYDzmwIstpgPwUAD5mcH/gU5/61H0cx3kAtCd+O64ss7YOHz58R1dX15/A+LLbW1UKAJzw+XxvVVZWNlZXVw9B6u+fDZCEQqGavr6+LwEDPHw+X/9nP/vZ9pQrThMeAKDU1NSMbt68uccIHtSEPQEeisYBUKQ8ZUmQQPsEyFCuLJKFV1YDRQ0PhVreS9xTpA/qd1vwIGMDyA3XFUvZ8+fPr2xra/sfsizX6bXhpgRBaJ87d+4/b9y48YTW+MwAov4ZAODcuXNzuru76wEAMMYeQRDoD5b6tdJ87eLxOLpy5coXwTw+/RkAeNKkjOtyOohuRsQAQkgm/VoJhNtZtnvx4sWZTU1Nn5FleTPzE1jXCEIoxHFcJ8/zfRzHjaHxPEzR1Jh5AOBkWc5TFMWjKEqxLMszAWAGxrgazE9xdEocADQkEomGVCC+g+f5N4uLi4/V1ta2+3w+3SW/RCwrtjTKchcvXtySSCSeAMYDx/bv33+F4zgBDOChKAoUFhYm6NVRduFBVlClxswEj9QYMMdxE4BCwyM1WEvwSL2vJ8GDuLMyhYdKtgPnVsrSY4jFYsKRI0c+NTY2dj84/wWWWZIk1TY3N3+jp6fnFzt37nyyoKAgYVbHLD3KihUr2ubNmxe6cOHC8rGxsRo74/L7/djn8/02kUjcZ1L08zB+oJRm+pRsyek/4L/B+FplXT366KNrgZo03YiHyLLMvfLKKztHRkb+BOz5KfV0jef5Rr/ff7G0tPTKnDlzuoqLi2OkXyOgkXvqsgMDA4V9fX2VY2NjMxOJRK0kSQvx+BJiJ8dtpghC6JDP5ztVWlp6eebMmf1GgXgi9fOqYXL16tXFo6OjD2GMl7EOZMGCBafuv/9+gBsxjDQ14Ma+CgAAvGPHjo7KysoYUKlM1IAg8KCvp9qZkIqEdmul6hBrYlKyROKqIpYKbY0QSlEbBgFjLJNrMrVhkKQmIT+TmIsWPOhzzMnO89SGQUvwsOO6ou9ZWVGlLtvZ2Vl59uzZL0mStEivn6mQIAgtDQ0NX1q0aNF1ck0r/qEGiFEgvqurq/TatWsLYrFYJYx/huiyhiCKx+N8ygoxWxH6UQD4T5MyrsppgHwVAP7MqMAHP/jBzZWVlRNeGCfjIa2trcVHjx79nCzLZikyWJRECL2bn59/aN68eY11dXWD6gJ6YNASa1lFUfiOjo6q/v7+ukgksjKZTG4ABtePgxpFCB3xer0X/X5/R1FRUXdpaemY3rdP8hyyLEMoFKocGhq6Q5KkewFgnpVO8/Ly2j7zmc8MAAAygYeCEIIPf/jDl3meT6cyoWMaNED04EHqGMFD9f8keBBw0HEOar+HQgNFDx60pUTDIxUXkacLPIzKtrS0zL948eLfKYpSqld3KsVx3PDy5cv/59q1ay+yuK+0fgeY/NqMjo4GQqFQRTgcLo1Go+WyLPuBwfJrbW1dn0gk7jYpdgQANpq15aacBsjfAIDh8szt27fvWLJkiaQGgRPxkJdffnl9X1/fnwN7MjRNIYROFhcX/+KOO+44U1RUlHbL6Y3HDYio7qGOjo6qnp6exdFodI0sy3dC9hcCJADgCkJoBADGOI4bg/F0LAFFUfIxxjUAMBdsWk4ej6fnscce6wgEAhyBBwCkd5nT8AAAKC8vj+zcubOTAR4TlvWawYO4pNQWCrEu1PBQ36NTkdDwSJVTtFxW9G5zI3go1F6PDOABYCPuQbfBGjgn15qamla0trZ+BZscHDbVQgjFFi5c+Fdbtmw5BmAt/kG1Mek6XXZ4eDhvcHAwP5FI+EVRDCQSCZ/H41E4jktijOWSkpLRmTNnDh85cqTi7NmzP2cY9kYYB8mUKNsxEIjFYgIASOqYRibxEEVR0C9+8YtPxuPx389g7GFBEP5r7ty5L69cuTKkNcGbbVRkSdioVVbdD102dQ9mz54dmj17dggA3kwmk0JbW1tNX1/fikQicRfGeHkGz80qHwAsJQaBWRDdijiO63v44YdbAoFAQA8eKcsAcGon+qxZs8YoKDDDQ1HSe/cm5irBGFjhoUzMYZW+B+Nwm+TKIvCQVfs9tOCR+tkUHkanQaqvGcGDVXbStSOEcHNz8+LW1tb/k+vwAADAGAcuX7789z6f748bGhqa6Ht2TyBUq7i4OFpaWprecC0I42FB8oWA/L5r1662pqam12VZNrNCPgcAv+fE2OzIaYCMmhUIh8MBSG2C0UpFwhosp8tlCI9wIBB4ZsOGDS+VlZWlA2l2zxGxAxGjdrXueTweacGCBVcXLFjQBgC/6e7uLmtvb18ej8c3ybK8AaY4SaYVCYLQ8dBDD3UWFxcHFOXGmRVqeJBLiqJgj8cjz5s3b4SazOnMuwoA0BsFJyRDJGUIIIhrirIqNPNY0fAgjVGrrhQAmLTfgwJQ2uKQUxsI9eCRsj7SMQ8SF6EPhHISHm66rtrb26ubm5u/gjGelMIoV4Ux9p8/f/4fg8HgEytXrrxmpa4VuLKorq7up1euXDEDyIdgPE/WlBw0ZZ7rwJrqAeCDRgWKiop+OW/evHQuF3pi5DgOUh9m9Td/AO1VQXDo0KE7+vv7/9zGWOM+n++ZjRs3/t3atWsb8/Lykuo+6PHQ94zGAwCIrsdSVq8frfJat/Lz82OzZs26NmvWrMOlpaW/jsfjZyVJimCMZ4LNY4azoYKCghOPPPLISH5+vpcCxgR40MYImZDnzp07VFdXF8bU8bVkzibXqHjGhM17autCDx6Ui4qkQ5kADyq8gYmloYYHAQ8BBKRWk6msDSX1/4RzzAk81KcJThU8UtdM++a48fBmNBr1HT169GuKolTq9ZGrwhj7e3p61tXV1f02EAhIABOf3cB9pdmeUV3y90y9z0kaIQwAsGLFir533nlnCxjHPzkACAPAmyaP5Yqczvtk6sKKx+MTlnKqX1C9M9D13uwdHR0fsjpInud/feedd37sAx/4wE+rqqrSKQFYfcFGZfX8wGZtWvmWp1L6W7vH44GCgoJofX39yU2bNn1306ZND1VUVPyp1+v9KYxvPsoVicuWLXvjsccew16vVwAKFmp4ECiQyVoQBHnlypUDN5igTLBQtOBBA0btmqLhATD+vqOAMwESKUtDIWAg12h4kDgNdT3trkq5prTgoeQiPFjLq/tECOEjR478kSzL03bflSRJtQcOHPgCQGbuKyt1ifuKrltaWvpjhqqfAsYl8k7LaQukDgAeNCoQCAReWr58eb/awmCxREDjG/ipU6e+COxJzq7PnDnzL/fs2fNCcXFxQqs99Td9Mhate05YF7SVwmqJGFkjdJ8cxynl5eUDNTU1Z2tra3/DcdzheDzeIcsyDwCVOm24qkAgcOaBBx5oWbNmTfqsBRoAcGPPRxoeGKcTH0J9fX1fVVVVhMADUgAlVoIWPICKeZDyqesT4EEAk/oGKJO6xEKgyqctDLXlgRBKp2EH6kApGiY0wIi7isCDlJ8qeKTuT2jHqqVy8uTJrQMDA5806mM6SJKk+QMDA50LFixopa9rWRoGXxJ1f1fHP7SskTlz5nSePHnyg2C8X6wAAM4CQJNBGVfktK98xKxAMpnMA5gc67CTmj0llo00iiAIz2zfvv1nJSUl6fQFZvEM8rtRrIKlDaeD6wb9YgD943Jnz57dPnv27HaM8Yujo6P57e3ti8Lh8OpkMrkFAMq1+nFKPp/v/LZt266vXLmyDCGUPt6TmqQBJm4YpKGCMca4rKwsumzZskEaHmQyp6+lXhtMtZ22JAgMMOWuInEGUg5S7ipqkp8ADwIMsteDgA5SGwUpmIFCbRak4UHHOmh4UPEOklWX6UwPIgfgobmE1agsrXA4HOjq6nrctPI0UXt7+xNdXV3vVFVVhaei/7KyMikYDP40Eon8kUnRT8MU7Alx2gIphPEt9rry+Xyv19fXdwJMtjxYrBD1t+/z588vVRRljkGX3XV1dX+yd+/e3/n9ftlKfIW+noklon4erbJ0eaO+1OVZrRF1Pb/fL1ZUVHTX1NScqq2t/bXH43lNluUziqL0KoriBYAyrT6tCCHUO3PmzCM7d+68vHfvXl9VVRUdTE15hPThodxYMYXz8vLEu+++u53neZmUpa0MYmEQGOBUxlzaiiBltKwRyi2VjnXQ8KCBkgLNpIOkCABkKreV2o2FMU5fI/BIlcX4xobBNDx0XteswcPE+pjQL0IIv/POO3+YSCTWGvUznYQxDnR3d/vq6+vfA8he/IN2Z/E833nlypUHwdhjMAfGU0lN2qvmppy2QIbNCiSTSd0VGXpLe41WZlVXV/+qvb19m1Z7CKHDW7Zs+WpdXV2EtT1VfUcsEYBxOFq1RFKvl2F5g751rRGNeri6urq3urq6FwCOAcCPR0dH83t6eiri8XiNKIq1yWRyZjKZnAUA5Rhj9T4bESE0yPN8n8fj6ZwxY0aioaEhf86cOcVer7ccJp/lQWIFEywNI3js3LnzmtfrTZJ7KLWyiky8xFKhXFLpvSEUGLTiGvQyXKwFjxtFlQmuK2q86bEoN5bhToAHx3Hp88vV8EgmkwrGWBFFEUuSpKTeM1MCD9Y6WrDp7e0tDYfDZik4pp1GR0fvb25ufnbRokW9VuplEv+gtW7dusE333zzNVmWjVK9IwB4GAD+inmADijrAJEkaUIKdTNXltmkv2PHjpPPP//898Lh8KNUs9jn8/3b/v37nxMEQRMC2YQIfY8VIgCToUOuGbWvukzewBOApNcXfb2wsDBcWFgYBoArsixDLBYrjEajlaIozpRlOQ9j7B2vjiTQcCM2NTUJY2NjRRUVFcWlpaVFgUDAl5rk0/AAVfCcsgqA3CsvL4/cdddd1yl4YC14YIzpeEa6LQ14pPtSw4O2LpTxTYUTlvGSn8nrRgOJwIOGBlm+y3EcVsODAo2MMcY0PKyeJugkPOwu5kAI4fPnz3849b64qYQxFk6cOPHgokWL/lnrPssCA7XU8Q8jKYqCq6qqnuvs7DQ7K+T3AeBLkMX8WE67sEQYP/zdaHXXxXXr1p2iL2i5lbAFd9ayZcvODg0NnYlEIiJC6OqsWbO+dt99971FTEQ9d1Qm7iyrS3zpeyzLfLXKs7RvdJ+0pefW0qvLcRx4vd6E3+8fLCgoaBcEoQ8hFIHxidqrVUeSJKW/vz967dq1wYsXL3Zdv369LxwOR0RRlDweDwiC4KEskgnwUBQFC4KQXLlyZe/69et7PB6PTCBB3ECU5YIxxlgNDxowZKIHFYCIJQKU+4nAAo2vmlKXTS/DpWCT7p9AgxJAKoCuhgeJgSiKgkVRTLvetOCBEMJaLhKPx5NeNgsWLRat+6ybBbVcV2NjY4Hm5ua/hClaDeS2RFGcX11d/cvCwsJJSRedcl9p/U6uLVmypPfIkSN7wPgMoyIAeBsArpg+kENyY8PZMBgEZBWdvP92LRGiHTt2nAKANJjUZfQsCbuWCN1GJpaIlfIA7C4tAE1rhcmtpVM3/aYOBAKjgUBgFACuJJNJbzweL08kEuWJRKJEURTNY2qHhobiQ0NDcQDoBQDw+/38jBkz8svLy/MLCgoCBQUFAUEQBJ/PJ86dO3d4+fLlg4IgkCNr0/EOAgTKgtACinpjYdrCQKoEiMRyod1VNDzIKqtUf5rwoPJcEWtEkWUZcCreQeBBxkrSlRDIodSSXT14aL2eLLvLXYKHZpD9woULWzHG2UwAmlVhjH3Hjx9/X01Nza9YyttZ+qsV/yASBEEJBoM/j0Qinzdp5mEAeNVq33aVdYAAQIneBMiyEkutTNrKBYgAmEPBjkvLYAymbi11n+p7qlVBYn5+fig/Pz8EACCKYiAejxdJklQkSVKRoihBZTwoP0HxeFzu6OgYCYVCAwihsM/nG6qsrBxraGgARVHyu7q6CouKivLz8vLyOI4jyRWVFEzSdIDUpE/cTbQVglJp2okQlcMq9XxpCIAqUK6GB1lyS7uxILUyS7UqC+vBg6y2SiaTCoGUklp1pYaH0USeS/Ag1wYHB+8xqnszqL+/fzcATACIHfcVkREwtLRu3brXDh48+DkwDqbvh/FlvWMGZRyTWwDRFca4DMB4giWyE1Q3qm8EALcgknrmjIPrdN8OWiMAGYAE4AZMUnEN8Hq9Ma/XGwOAblJHURSPJEl+Zfw8FF4QhKSiKIrf748DQHpZdSKRQIcPH4bDhw/30H3MmjXLP2vWrGBlZWVeaWlpsKCgwJ+Xl+f1+XxehBAHGsHztHmhWrZLWyb05K+oMu3SQXICD2J1pCb/9H4PGh6pemkrA1JusySVmp2Kn0yChwVw0H9Dzb+ZnrTgYSajIHtfX1+xKIr1TA1NY4miuKK5uXnGokWL+qzUU1sjrMAASC9zB0EQYMuWLX1vvfXWexjjDQZVAgDwAQD4iZUx2lXWAQIA5RzHycr4QUuTlGlQ3ay9bEPEqB36npZlMTo6mt/X11czMjIyOx6P10iSVC3Lcoksy4UY4wKMsQAAAsbYB+Op5+MAgDmOG+M4boTn+TGPx9Pl8/k6g8Hg9eLi4lBZWZn6zW8JJGRs6vu0VUJgQurwPC9xHDe50cnSmvjQ9evX49evX48DwID6ZmlpqVBeXu4rKiryFhcXe30+n8fv9wter9fj8/l4QRB4QRA8HL3FHE88VVAPHpSbaoK7SQ0Per8HxliJx+OyKIpKMplUEomEIkkS5jhOEUUxDTSydFfr9dWSE1aHuoyF5bqG1kp7e/sdYPyt+GYRam5uXrNo0aKXjQplsnPdDC7FxcX/NTQ0ZAQQAIAHYBoDpMfkfhmMf+vkWSf9WwEioigKLS0tiwcGBlZFIpH6ZDI5T1GUIq3yOvJgjPMBAGRZLpBluVqSxr/ch8NhGBgYgPb2dkAIxTweT6fP52sqLCw8U1NTcy4YDEaAESRkvADmVklqLBPqEJlZn3RRo5uDg4Pi4OCgZFSGKC8vj/f7/ZzH4+EEQUB5eXkcz/PpKLQgCMRiIq4aLplMKqIoko0emCy7Vacc0bIm9HaPq5UNq0Ndxil4AAAMDw+vMuv7ZtHQ0NBaAHgZwFn3FctqLACAvXv3HvrJT34SBwDNWGNKu2D8SAvTVbGZyg2AmJl33uvXr/uqqqoAgH3Sz1WIAEycDK1A5Nq1a7M7Ojo2RaPRlYlEoh5jbPSmcEQY44AkSQslSVoYDoc/GAqFFEEQWvx+f2NJScmJ+fPnn4VUsD1TkABow4SuS40rk2+wTB++aDSajEaj5gUZZDR5sIDDosUBYPCM2YSHlkRRXGzW/82ieDy+1Er5TNxX6jqyLOPZs2fHPR7PK8lk8gMGVbwwnqX3h5Y7syg3AGK62eb69euFVVVV6SDPdIaI1j2jQHd/f3/h5cuXdwwPD++UJCkXPnicJEmLJElaNDY29uHOzs6+/Pz8N6urq1+vqqrqBAokAPbcW0TqidUIKGZtZVuZAoOlHSLW8ztYvwHbCZjrjUerXmqD6S2hZDI5O5lMcqkVgpPk1LkhADcsYbUqKipeCYVCRgABGD/udloCxMyFBYODg/mgWiVws0KE6PTp0xt7e3t3x2KxOyGHz+tQFGXG6OjoR0dHRz/a2tp6ubCw8LUFCxa8npeXFwe4MZmYWSUA5gAwAoq6LVpugoV1YrUCDdZ2nbY66HKsVofVet3d3TPwTbx8Vy2MsXDp0qWqFStWdNptQ899xWqd7Nu37+RTTz0VAQCjc1beB+P7QkzzE2aiKbFAxsbGNI9jvdkgAgD80aNHd/T19T0gSdIcrTq5LEmSFg4MDCwcHBz8RFFR0X8tXLjwhfz8/HRaGAB9kABYgwmA9qSshoq63WzIKiyIWMfpJjjU7TsJDwCAoaEho7Mqbkr19/dXAMAkgJidmW7HfUVEQ6aiokL0eDyvJpPJ+w2qCACwGwD+w3anDJoSC0QUxRI7ez6MlEsQiUQi3hMnTuzq7+9/QJblKmeecOqEMS4YHh7+xPHjx/9bfn7+i/Pnz/9lSUnJMDC4t4jsxjzMJm8twFiVXUBoya5rKCXm5bes5dyEBwCAJEmux+1yTaIoum5x0ct3tVRRUfFqKBQyAgjA+OF+0w4g/WYFRFHU3Y5v1woByA2IvPfee9uuX7/+aVmWb7pvZhjjwNjY2IfPnDnzgYKCgueWL1/+n36/XwS4sbudyAgmAM4F0Z2c/O3IqjWkE4x2BBzqslbgYbdeMpm85QAiSZLlI3r13FVW3VdE+/btO/XUU0/FYHzfh572wrglwrRK0Y7cAEi3WQFJkkoB9HeLZwIRvXtuQQRgfPK7evXqrHPnzv1xPB6/aVJZ6wlj7B0dHX3w6NGj2ysrK7+3ePHiY9RtyzAByP0gOpEd95nBCqYpB0cmdVOflZyN57klRVEm5fozc19lIi3IVFRUiDzPvyXL8r0GVYsAYBsAvObUWNRy448fg/E8ts/AAAAgAElEQVT1x+qU32klk8lS8rPTENHL8WSlTSsQCYfDvnfffffB4eHhB/D4xr5bRrIsV4dCob8ZHBx8Z9GiRd9LbVKkPziTYALABhSAqQmim/XNKrvQsNP3VMEjVSdmZaw3g5x+ZrX1Yea+IiosLDw4NDRkBBAAgD3gIkCcPhOdyHCFgqJKqGhwSIvmdTPakw+CVrusbSKEsLqsut0LFy4sfPnll//f0NDQ799q8KAVj8c3nT179snz58/vVN3C1L+0PB5P+p8dkb+Nm//sjMvguTRfB73nYu2PLq/uNxvwAAAQBMGZjTXTSH6/f8IzswbP7W4e1NOWLVveA/MvJGYp4DPSlAAEY1zOavJNJUS0ypJ2Dx48eP+5c+f+RZblGq22bjVhjAO9vb2fe++99z4Xj8d9WkVAYyKlJ91MoDIVMhk3EzQAMgMHGYfVtpyABwBAMBgcZRv1zaO8vDzXd3gT6cVIeJ7Ha9euHUYInTFpYgUAuLZPZ0oAAgBlHMfh6QiRwcHB/BdeeOFvenp6/uhWtjr0FI1Gdx49evRboVCozqSoJlAAtKEy1WBhHI9laGQKDqtWh7ocvbHQKjwAAGpqaq5DFg8wygHhhQsX2t4DYhY8Z3VfEeXl5f2OoZhrmZKnCiAzMMZJAPbgkxMQ0XJTsbRJyp4/f37eyy+//L1IJLJNq95tjUuW5dnNzc3fPH/+/A4LE6QaKJPq6YElU8jYbNd0vFqy6yIzAwer1aHl8rJqsdDXBEFI8jzfxfYU0188z/eWlpamYyBW3VdOq6am5jhDMdfcWG4BpMPkfgmdkyhbENG6Z9QmXfbo0aN3nD59+ls3w76ObAhj7Ovt7f3TkydPfiSD+ILWJG1YnwUGFqFjeQxqZRJbccJdRcrqtWGlrtY1r9d7lWUMN4O8Xq/rp/2ZWSk8z6df+927dzcDQNikybsB3MmWPFUWCLS0tGjuRifKBYiQsocPH76rubn5n0i229tiFhoeHv7k0aNHH6VXTmUarAb9Sd2Nf5aVaUBeq24m7io34eHxeKCwsPA0y1huBhUWFp4gP2caPNdzX1lRSUmJzPP8OybFKgBgidW2WeQWQK6ZFQiFQhNOLbSybjqbEHn11Vfvu3r16v/G42d/35YNhcPh+48cOfJFWZYnfd13agXUVMqp8eut/HPK6rAa72CBBwBAZWXlLQMQRpeRa6KtD6JgMGgGEACAu1wYjmsAuQIAhjkmBgcHK9QEtrIZJxOI6AXX1W0eOHDg90Kh0BfAvdfpllEsFtv+7rvvflkLImo5ubTWabkxLjfA4bTVob5Ot7lw4cJrPM+bbiCe7uJ5vq+hoaEFwD3rw84O9UWLFrEAfCtDGctya2KUAKDdqEA4HK4EmPwCZQMiAPortEibb7zxxq7e3t5Pg0u+w1tRoiiuPXr06OfsbgTUA4uTgMlGH+p+yDWtuIydlVrq9rTusdQ3ald9r7Cw0LXNarmiwsLCl3mez7kVZ3v27OkE88OjppUFAgBw2eimJElVepSdaogcOnRoU0dHx1/AbXg4rlgstuPYsWOPutG22eTP8s+NcWmNj76uFcy3A45Mg+124EHuz58//xXWsU5XLV68+LcAU2d9aLmvUuUUnuePmgy/FgDqTMpYlpsAaTG6SQ6hyTWIHDt2rP7q1atfhttuK9cUDoc/SFZnTfVY3JQRnIysjUzBkeneEK3reivWyP25c+de9/v9ZpPYtJXf7z+xdu1a11dg2VVeXt4J81Kw3ul+p8wCwRgv9vl8GCB3IHL+/Pm6pqam/5uNo2VvdQ0PDz989uzZu3M11mFHZs/hFDToeuq29e6ztqN1XW+ps7peXV3dT9ifYHpp/vz5TwO4e+aHHZH+a2pqGhmK3+l4/043SOl3Jvfn9ff3K2Zmm1sQUV8Lh8P+06dP/x+MseVUzbdlS6ivr++POjs75+q5b3IZLCzj09tvkskzOQUOUtbsOis8AABWrlx5zufz3XQrsnw+35nt27ezfMNPK1vuK6KdO3deAfO07evYRs8uNwFyGgCMEq3xR44cmQlg/uK5ARH1tQMHDnxuOp4aOJ2FMfa2tLT8ZSQSCbBs8Mtm/MJOX0bjz3ScToPDaXgQLV68+F/BZAXmNJNSX1//DYDcsz5ozZgxQ0IInTcpthYAHD1Ax02AzAKAPKMCXV1dtaykdhMiBw4c2D02NrbXaKy35Y5kWa45ceLEEyzf4M12jjsRRGeZiFnG5RTczMBBylhpj7UfK/WJlixZ0lpUVPQL1vHkuoqKip5fv369oTterWxZHxoAM3Nj5YPDGwrdBEi9WQFRFIsB2F9wNyBy+vTpOZ2dnX9qNtbbck+xWOx9J06c2MM6mTuUomSSMmnXSWtIq51MV2pZsTqMrD+zPgAANm7c+DTP84bL+KeDeJ7vvPfee78HMPU5r1gUDAbNLBAAh91YbgLkDrMCJSUl6ZxZ2YYIx3E4mUxyJ0+e/F+3g+ZTr/7+/sdCodBMrXt2XVYO58QytHBsPLJu+1rPoDUGu22q79N9mZVhaaewsDC2fPnyv0UIJVjGmItCCEmrVq366xkzZkTsnC6YbetDURRcW1vLYiktZyjDLDcBstKswNKlS69p+Q2zAREAgBdffPF+URQXmY3zttwXxtjf3Nz8uJU6TrqsMnVr2ZWRtZHJhkJSx6xfuj+rbRiVWbZsWWtVVdU3wWY+salWVVXV1zds2NCsdS8XrQ8AgD179rQBgBm0TT1DVjSVLqy+tWvXRgC0/wBuQ+Tq1atlPT09rmxouy17isfjG86dO7dhqsfhpvSgZBZLsdMHyz0zlxxLX+pr5LO4devWl8vLy7/PPPAcUVlZ2Q/379//awBr8wyRm2lLjOT3+zFCSBN6lKYFQAQwCdYghM4ripJeEZBtiBw6dOgJRVFuZ9fNMXV1dX06Go1qnWg4LWVkxTi9YsuquypTq8MIHqSP3bt3/7SoqOh508HniIqKip574IEHmKHnNARoWXFfkb55nr9k0uwsACh1ZoTuAWQJjENEVx6P56I6fbFTEDFLBX/w4MHV4XDYtVO6bsu+ZFmuPH369Mfcdh25JSsLAPTq2e2T9b7ZSjaW/rSuq+FBtG/fvn8pKyv7kVm7U62ysrKnP/7xj3+T/G7H+iCyan04pUAgYGaBADhohbh1TqjpAIPB4GWA8ReU47h0zilBEECSJJBlGfM8j7Sukd+JOI7DiqJMyFuldQ1g/M1/+fLlJ+AWzHPF83xnXl5eo9/vbysoKOgoLi7u9vv98UAgEFcURYnFYv54PB4YHh6ujEQiNfF4vC4ej6+UJKkOsvh6jY2Nfaivr+/XM2bMGADQn7DsJmV0QqwTfaaTdSZj0LJ4Mh2LVXgQ7d2795nXX3+9v6ur609y8CjoZHV19Tf379//S3IhE1eVHShkEjyn65eWll4dGxsz624JABy0OkYtuQWQpWYFqqqqrhAQZBMir7322npRFF05XCUX5fV6m0pKSl5ZuHDhO1VVVQMAhhNvJJlMAowfCHaClO3r6yu+cuXK+sHBwV2iKNaDyzDBGHsvXbr04aqqqqfo66mxpZVr1onZSi4nxmvHQnBqXHbhQerdfffdL54+fbqlqanpy7IsV7P06bZ4ng/V19d/efPmzYZLYO1sGsy29QEAsHDhwrZr10yPY5rvVH9uAWSOyX28du3adgDgsg2Rtra2hx14vpwWQiiZl5f32sKFC/9j4cKFk9bjkw+0FkjIBEAma4QQrqioGKqoqPgtxvjljo6OysuXL380HA7vdvOQrXA4vLe/v/9n5eXlI+qxaUkNF7dkZX+Jk4CbjuDQqrtq1apLdXV1jxw8ePDxsbGx98PUJS3FBQUFL+7cufPb1dXVE46EteK6Yt1+YCSnrA8AgK1btw689tprIgAYfTYXMw/ORFMFkK7a2lpFlmVEg8AIIgAAdFk7EDl48OAdiUTCdH/KdFYwGHytvr7++7Nnz+4zK8sCEoCJMKmtre2ePXv2d3p7e/+9sbHx4UgksgdcsEgwxv6mpqb927Ztm+Q7NxtvtuXmEl875Zy0hJyEB1FZWVn4Qx/60NdOnDjxUnNz85+IoujYhMYir9fbvGzZsq9v3rz5rPqeHdcVi9xaeaVWCj5XwHgR07S3QK7xPM8rijIJBHoQAYBJZY0gAgBAg4TjONza2vqwg8+YU+J5/vrcuXO/sWbNmlP0dZY4gRFIALStksrKysF77rnnG01NTQeuXr36eUmS5mb6DGqNjo7uGxkZ+c+ioqIJ3xBZJkAn4yPZdJVlMrlnAxwAmcGDrrt27dqm1atXP/b2229v6uzs/IQoistYx2dHXq/3Uk1NzdO7d+9+i/W1cGLZrhVlYn2Q+jzPt8mybAYQDgAyPhzLDYB4AcDQv8nzfAeAvkvKCYgATLRGjh8/Pi8WizmeDz8XFAwGX7/rrru+UVxcHFVbX2ZwsFJWyypZtmzZhTlz5nz27bff/mwkEnm//aeYLIxx/vnz53dv2rTpOat1cy0+YqRMJ3bWXfSZjkfreGjW+noTMcdx+K677nobAN4+ceLE8mvXru2ORCLbFUUpZB2vkRBC4YKCgjdmz5798rZt206zglFvzHZgkS3rg8jj8VyTZcN8ln4AqAGTU2OZ+sq0AQ3Vgolf0+PxdJKfswWRixcv7nH0KXNDuKKi4sldu3b9J5nQtawvAHsgMSpPTx55eXniPffc880jR45c6O7u/hw4mPFzZGRkJwBYBkguy+5SXfW1bIEDwDmrw6jvdevWnVu3bt25SCTyrTNnztzR19e3JhKJrJYkaRHryi2EkCQIQkswGDwxY8aMk+vXrz9ZUFAgGY2PdYxGriuzZbssytT6IMrLy2tPJEyzyMyGHAWIqSsjEAiE6N+tQAQANMsaQURRFDQ6OnqvM4+XG0IIJWtqar66bdu21wEmu5nMQALgjFVC971ly5bfHjt2bLi9vf1LGGNHNgNKkjSvpaVl3oIFC3L2NDgz2bWG7ELDap9mZbMBD/r3YDAobdmy5RgAHEvd5y5fvjyzu7t7diwWK0smkwFZlgMAgHiej3k8nmggEBioqqpqX7x4cZfH45nkmrEKD6ddV9mwPgiACgsLu4eGhsyK1zjRpxsAmWNWoKioqIvneSzLsu6qKz2IGJWlfweANEhee+21BlmWZzj6lFMrZfbs2X+/bdu2N9QTOytIAJy3SgAAGhoajng8nr++cuXKP2CMHXl/dXR07Fy4cGF6Se9U7v8wk1t7O5y2NljqsIDDqA078NDpV1myZEloyZIlIb127ebD05JbrisjOWV9AADMmDGjn2EpryMAcWMJ3RyzAlVVVb0Ak180vT+SlhnIsomHXAuFQjeV+6qqqupb27ZtewPAeMKhP/RmO/StfmM1qrN69epT1dXV/wQOJdKLRCLvSyaTabeYere32e5vJ+V030b1WTMF2+nbqI76vWInX5YZPPTqmvVr11rQk1uuKy3ZPW2QRXQb8+bNG2CokrMAMRsYbmhoSC8xdQsi5NrIyEggHA5vs/UkOaiCgoJf79y587/oa0YfZDdBQtdR19u4cePrJSUlz1ppS0+KopSeP39+tZ0xOf0v02dhBYaV9PJ2+te7r57A7bisWODB0rfRfaNrLH2xtseSLVxLTmwatGN9AAA0NDSMAUDcpPnZVsejJTcAUm5yv7e4uHjCBTcgQq699957qzDGAWuPkJsSBKFl165d39H7kDoNkkxhsn379qe9Xu+ktfZ2NDAw4Ph5zm6LBUBWD8DK9G+jd5/V6iBt6bXBMg6zurkCD1pGloaVwLnb1gcAgCiKAAAh7dJpOZIJYCoAMsjz/KRVOlYgYpaEURCE9LXu7u41Np4hFyWvWLHiH/Lz80VywW2QmLVlJIQQ9ng88qpVq76KHDhYKB6Pr5oqt5WZWMdk99REJ1xkeve1wOGGy4rUN6ubS/DI1HWVSeDcrvVBhBDqMiliNk8zyQ2AmKUK7te7wQoRgMmU13JfCYIAkUikgX3ouauioqLnV65c2aJ1z45Lyi5IrE5idXV13SUlJT+xUkdLkiTNGxwcLGI9Ujab/7TGYxcWWs9j/dVyFhykPZZ27NQ36t9peBiNgVY2XFduWB+kP47jzOIgOQuQMqObCKEhozcAC0T0XFpq91V7e3vBzXDiIMdxY1opPVRlbMU21BMcacdJmGzcuPHnPM+bplYxEbp69eoq9ZgznajtyukxOGFRsdS3A45MrQ6t+vQ49Pp3Ax5WguYAU+O6ytT6SLU/bFKkBEyO3GCR0wDxwPjA9DvkuOHU/7YhQl/Tggi5d+LEidUwdcnaHFNxcfFzpaWlEZaJJZMguVWrhG7TqN28vDypvLw844D68PDwKpZyZpO7E/8ylZMuOJY2tP6WmYDDTZeVuozRNZb+7LapF1dVX1PLSdeVkfSsD6/XCzzPDzI0Yfhln0VOT66mJ115PJ40Ge1ChDW43t/fP+0TJyKE4g0NDc9TvzNNOJkEye1YJWbtrlmz5rccx5nubjJSPB539DjObMmNmA1rW3oWhx13FWmPdXxm9XMRHnbjHk7s+dCSUc4ro3qCILB81jLeG5d1gPA8P8E3ZwciAGwrtOLx+Byz8eS68vLyDs6aNWtEfd0JkLC0o2eVWIVJfn5+oqCg4HWz8RopmUzWYIxRrgXRiazESDJt36ysVVcV3T5Le3bboMdjVsbomrpPo/tW4aF1jSXuQctt60OvP693PIu71+sdZahWZLc/IqcBYko0r9c7qn7BrUKEdZlvMpmsYx14rqqmpua3APZWXNFyCiSZwKS2tvZVs3EaCWPsaW9vn2nUhxMBcCfbylR2oOEkOEi7rGM1GpfRePTeR1MBD5bNyVpicV1lw/oAAPD7/WGzMgCQccJKpwFiOqC8vLxRgMmTvRWIAJgv8x0dHRUkScqJU8/siuO4sS1btpxUT9paZTOZZLTacQMmS5cuvczzvNnyQkMNDAw4sgGKKBetGatj0YtvOAGOqbI6jK7T/RrddwIeeuWInFp1lUngXG19AAD4/f6YaUWAfIYyhnIaIAVmBbxeb0zPYjB6w1qBCABAY2PjLHAwK+xUyOfzneF5XgEAzZiEVp1MJx6rbVmFSV5e3kmWselpdHTUUYBMtewCzMjayBY4SFtG7dBjMyvDcp2lX5b6WrIaNDea5LMdOFcrLy+PZe9VkLVfPTkNENP2eJ6PAxjHLjKFiCAI0NXVNe3dV8XFxSfU16YSJJnChOM4XFhYeJplTHpKJBKO5PCZKmVi7eiB2Qo0nARHJi4rUs7Kdbpvo/tW2mUJmmvJatzDCdeVkWjrA2D6WiCmKbw5jkv3aRciLCu0otHoLCsDz0WVlpa26L0OboLELZgAAJSXl7eyjEVPkiRV56LbiZZTcRI1fOl7TlkbdD+s43LC6shVeGQa99CSHdcVSztariui0tLSiF47lDK2QJzedeU3K5CXlzdG/26Utp3jJp9vTqSXDh5g/IUVRTHjFQZTrZqamg6AG28yrdeCfEiTyaRhOfLBY02FbtSWuk2zdumJZN68eZ1nzpxRwOaXF1mWNeNsViZnO+ngswEpo8nTzk72TPqz2qYW4C5fvlzZ3d1dy3GcWFtb2z579mzdTcSssRaj+9mCh1HcI5MNg1rjY2lHLVmWcV5enmReMvcAwuLCQnqTP/nD0CCxChGA8XNAkslksVad6SKEUHzu3LkT0r5MJUj02lO3a9Z2MBiUeJ7vl2W5gqV/tRRFyfiLQa5YLGaTphvQYOnXarukvXA4LJw7d66+q6trUzgc3iBJUtqNfP78eSUQCByvr6//tzVr1rRo1XdiDCzXWWMWbsY9tJRp4JxWYWGhqHljojKe/50GiGkQvaioKA5gbEGorRErECFtJZPJaZ2BFyEU0XtuJ0ECkH2YcBwXzgAgQRbrKJfEOmHbTYHi5BistM1xHO7o6Cg9f/78pqGhoQ3xeLwBY5ynVzwWi9157NixVf39/V/etWvXIdZxuQUPu0FzWnbjHpm4roxEgSUrGTiykziIEs/zMvWzrgWRKUQURcnYPJtKIYSiAMawcAIkqb4sWSV030bt0m0TpTYCsvhn9ZT+ysUy+WQDMnYm50zSoVixoJwGhyzL3KlTp5aGQqENY2NjmyRJWgAAzK8xxth79erVL585c+YPV69e3ZbJWACmBh5Oxz30xqgnPeuDNW5DKePPhtMAMZ20PR6PTP+uZ0HoQQRAe1IgfzCqrWnx7VRPHMclVb87BhK9snasErp/vXbVfSCEJp1ZzSqMsaCefMnxvWZjmwo5lTfLSnm7z6zXT1dXV+GFCxcaBgYGNsZisTsVRcnIPYwx9jc2Nn5q9erVf211LLRyBR5uuq6sBM6JvF4vzJ8/PysbCZ0GiGl7paWlMXJ2OblmBSIA1q2R6ShFUTRdAU6AxKwsgD2rhG7XqG2nD/iyMkkbwcaN/uzKTpzGSXCcOXNmYUdHx/rR0dGNoiguB4dXbEaj0c1DQ0P+kpKSSSfn5RI8tNoxg8cUu65YqziirLuwotGoFwDibkPElcFnURhjQ2su2yBJjckRmMiyPGXxqWyle7ciu0H9TK0rut/h4eFAY2Pj2r6+vo3RaHSDLMsZJ9ozEsbY29bWNrOkpKRNb0x60npuvdeCFR56sho0nwrXlUY5FIlEeIQQYGz4eBl/m3L602SawCscDnu9Xm9cFEXQggjABDeUbYhwHMeyCiFnpShKcHh42FdcXGy4ozRTkACwubcAHIWJ7cNsEEJRu9bRVMuJ1V9OuOTIOJqbm2e1trZuHhkZWZ9IJFZhjDM+H8KKfD5f+jOayWIAJ+DBuuLKqaC5Xvt6bRmBjgaLLMtIlmUcCoXyAABMIJJJLBIAnAcI85vb6/WCFkQA9FdoWVnmy3Gc2aHyuS7U3Nw8e/369ZcBzCdLuyABsG6VANiHyZUrV2Zk4sJCCEnUz4bvt2wDxo3lwU7FcBBCOBKJCGfOnFnV09OzIRwOb5Jleco22yKEEgsWLOghYzMrb3X/SC7BQ0t2XVdGgXO6DFnRCmAKkYzkNEBMt88PDg4GIWWp2IEIgPYy39T19DWPxzMpBfp0U39//xwAuAzAHpNwAyRGdeixsYyvp6en1ui+mRBCLGmqJ41rusjpoP/Vq1fLW1paNgwNDW2Mx+NrnY4/2VV+fv6rXq9Xnm7w0JIZPIziHiwbBlkD56S+LMtoYGBAbzk1rYznSKcBYuo2UhRlwgocqxAB0F7mCzDRGhEEYdoDZGhoaCUATEiB7iRI9O6r3VssddTj0xtjf3//SqNxm4nneWaA5LrcWCGWWma7PBQKbUht5lvgdB8OSFm+fPnP3ISHHiRY4UErkxVXTsU9jO4ReMiyjHiex6RdhMY/fhhj16wQpwFiGpSJxWJ5aljQEAEY361O7tkNrvt8vgm7uKejotHoGr17CCHM4qIxszpYrRIAay4uMkbyMxlrJBLRfSYW8Tzfb/ShzLXNhdlYRhwKhYovXry4bnBwcFMsFmtQFCXj5ZluKj8//9W1a9deMSpj9LqxrrRivU5kZ7mum3EPWiyuKzJXchwHY2NjLJZmzsVATAeUTCY5AJhkcRCIaN2zA5GysrL2jo6ODB9naiVJ0tympqaqZcuWaZ6hYSWYnClIAIwD72Z1EUK4q6urUBTFpWZjNZLf7+80um9nwmaFzlTvKSFSFAWdO3dufkdHx6bR0dENqdc0KzuPHZC8Zs2aHxoVcMJlxXqdKJvw0FKmritRFMHr9abHiTFmeT/k3CosUymK4tFzW9EvhtUVWgATg+sLFy5sO306o8zhOaGzZ8/uWrZs2TNGZeyABMCee4tIHS9hqXv27Nkdma70CQQCjn8ryBUwGGloaCjv7Nmz6/r7+9dHIpFNiqKYHh+diyooKDhQX1+v+ze8FeCRadxD6x5ZgcVxHHAch2KxmI+4rQzcVyxnhhjKaYCMmRUQRdEPYBz7cCIuUl9f3//cc89FzPZT5LpGRkb2AMAzRkuWiayujGK1SozK6O0K16rb399/r9mYzFRSUjK9zUpGIYTw+fPna69du7ZxZGRkoyiK9dleZuu0EELSunXrfqR1z6rLCsAaPPTiDU7Dw0xOxT3U13ieR4IggNfrBY7jQJZlAWDiCiwNkGS8UtVpgETNCsTj8ULywE5BBEDbpSUIwlVRFFc48WBTJUmSal999dVN995779ussQcAZ60S1jIA+jGTo0ePrnDib1FTU3Mt0zZyTeRvFQ6HvWfOnFnd29u7MRwOb5BleVofyaxWYWHhC1ruWKtWB4A5PFgC327Aw824h9a91BlICAAQx3GQTCYRz/MoHA6zZK3OuRjIoFkBURQLAW5Q0y2IAAD4fL726Q4QAIC2trb/DgBvk9/dAglr26z90zBpbW19iKV/k7ENV1VVGa7CyuXNhVqrjlpaWmZeuXJl/dDQ0KZ4PL4aY2x6ps50FEIoceedd05wxbptdaiv08pVeFh1XZHfZVlOWx8cx0EkEilgWHnVZ3STRU4DpNesgCiK6URsWhABmLgKy+4KLQCAYDB4cWxsbG/GTzXFEkVx2UsvvbR17969b9HXswESo/ZZg+hvv/32HbFYbANLv0byer2mpxm6fbCU3b6Ikskkf/z48RU9PT2bwuHwekmS5mUyhumi4uLiXyxatCg9Yd2Ghz48tKTnuqLHzHEc4jgOxeNxFI/HWSyQAYYyhsq6BaIO/tEQAdAOoNsJrgMA1NbWHu/u7s7ogXJFbW1tnxseHn5PK7WJmyCh2zfrQ6ucJEl8c3Pz58GB7Mj5+fknM22DVrY2Gl6/fr2kqalpw/Dw8PpoNLp+usflrAohFNu8efO/A9gDB4Dz8LBSLxN4sIoeg9GSXdp1lfo/7b6SZRmJoogAAJLJZAlDtzkHkBiMx0F0d0EqilJKL9kFmLhs10mX1t69ey8dPwaaOToAACAASURBVH58NNfXxbNIluWZv/nNbx576KGHvgVgb6c5rUxTt5v1Qcq9+OKLDzr1LXvmzJkndT6sOeW2kmWZO3369KJQKLRxbGxsoyiKi2D6LLN1XCUlJT+fO3eu4ZdLq1aH0T3WlVYs9TKFh1txD/qaLMvg9/sRx3EAAFiWZSRJUgnAjc2EAKB2Z2Fg+MJvJjeW8fYDgG66CnKWgBZEAMZdVA6u0FICgcCJSCSyw5lHm1oNDQ09cODAgeN79uwxDKhbAQmAe1bJ4cOH63t7e/+QtU0jIYSiDQ0NFzwez6SU7CzLcN2GzODgYPD06dN3Dg0NbYhEIhsURWH5BnjTCyEU3rZt20/07mfT6rBaN1vwsBP3oBUMjhu08XgcpcaFFEUpMomBDACA7XN5iLIOEIxxqTr2QctqcB1gclwk1Q4CACgqKjp6swAEAFBLS8v/amxs/MOVK1d2AmSWsmRS4w4cKEX6amtrK7tw4cL/BgCetR0j+f3+M4IgyADGKdn1zvtwY69HY2PjvGvXrq0fHR3dlEgk6sGhZ72ZVFZW9mxNTc2k5f1WUnzc6vDQu0bcV6nxTPgfY2z2BSZj6wPAHYCY+dVmIIQUWZY5KxABmBxcB9COi6TKYlmW0eLFi4+FQiFHHiwXpChK0VtvvfXPhYWFn5ozZ84wue7ETnNamaRu7+/vD77++uvfkG2ee66lwsLCEyzlWM/7sHOw1MjIiP/06dOre3t7N6XOzJhpuZFbSBzHjezcufM/NK5nZHWY3SPKJjxoOR0013Jd0X1xHIcikQhAKhYCAKAoShkpgzFO/6OUcfwDwB2AmJGtXBRFRRAEjtUSAdAHhZlLa+fOna2HDx++JklSnQPPlhOSZbnmwIED396zZ88f0RABYN9pbsWlY8XF1dfXF3zhhRe+KknSfNb2GYSXLl160MH2mEFz6dKlqubm5k3Dw8Mb4vH4Goxxdo98m8aaMWPG/zdjxoz0XoNsWR0A5vDQq2sXHpmsuLIa9yAKBoPA8zyIogg8z6d3oadul6nLq5TxEl4AdwCimbeJku93v/tdyT333DMGoA0KIjvBdYDJLq3S0tIXenp6nnDk6XJEoigueumll763Y8eOP166dKnma+6kewvA3Cq5evVq2euvv/51URQXsrTHKp/P17hkyRLd95WT8Y1wOCycPn26vqura0M4HN50M33xyKY4jhu45557nk/9zPyNPZNAOYB9qwMgd+DBmgNLHs++C16vF2KxWHolVigUEjDGZoe29ZjcZ5IbAGkzK3DlypVKoNKeaAXQje4Z7Rchdeh769evf/HXv/71Z+AmWwkjSVLta6+99oPu7u4v7dq16wR9iAwtp91bAJNh8u677y5pbGz8iizLVZYegkFlZWUvG93PNIh+/fr1ojNnztw1NDS0IRqNrrvVltm6ocrKymfKysoMzweyY3Vo1SOaDvCgxQoPnVhI2l0Vi8UQtQ8Ejh8/PpNO5a6jNqOxsWpKADIwMFDl8XguJ5PJCR9qK8F1+hopo+fu2rRpU9crr7xyMh6Pr8v04XJNiqKUNjY2fqe7u/sHDzzwwNNer1cGANCCiRO5r9SSZZn75S9/+Xu9vb2Pu5GrCSEkbty48Y1M29GaAEZGRnyvvPLKQ4ODgx/NlYOWbgbxPN+zZ8+eX+rdtxLPcMplZVTfDXjoKZOgORHZcQ4AOJlMcmSeI1Dp6uqqZBhKG/OgDeTGN/I2swLRaLQaAMDj8dhe0mbkG1TlicEAABUVFS+wP8K0E9fb2/vIk08++eNXX311FcD4m1rvjc1xHCb/dBtkKPPuu+8u+eEPf/i9np6e/+FWor+8vLxDlZWVY/R4zMbFonA4LPzqV7/6+4GBgT+4DQ9nVVlZ+aOCggJNc1g9uRtZHawuq1yERyYrrljmNvIFMQUNxHEcEgQBZFlGo6OjMwFAK3BOq03vhhVNiQWSSCRq0gPweLCRJQKQWVyE1Nm3b9+rTz755BcURSmw/2i5LUmS5p85c+bJlpaWt5YvX/6jrVu3XqSzFWvJTu6rkydPzm1sbPyDSCSyE1x2C9bU1PzGbFxaMrOgXnzxxUdjsdj6TMZ2W5PF8/z1D3zgA5P+ZtPN6gDIXXiQLQo8zyMSiyQQwRgj8gXdRG0MZUzlBkBGYHwllu55BYqizJkwiJQlQoNECxT0PQC2uAjAOICqq6sjpaWlP+vv738k4yfMbaFIJLLt6NGj2xobG49XVFT85n3ve9/B8vLyGIA5SAC0J9/R0VHvW2+9taW7u/v9qbxWrseTvF7vhbvvvvuonbpGcGlraysdHh7eb39kt6WnWbNmfd/n86XXSBvBQX2fNdYBcPPAgxYLPEgfHMehZDKJZFlGHo8HybKchokoijXq+irFAMCRvQ1uHSh1FQwAgjGu00o9orZGjILr5L6Vpb67du3692efffbjGGOWA+enveLx+Lr29vZ1zzzzTMzv9x8vLi4+Xltbe/KOO+5oKywslIxgkkgkPGfOnKm9du3ampGRkTXRaPROjHF+NsdfW1v7jHkp6zp79uymmzXr7VRKEIS2ffv2vZz6ecI9MzhkanWwtmEXHmabBPXaNoMHK1xU5TlBEFAikUgHzzHGiOM4lMpGPmEjt4Yrq42pMwa5CZC1Bvdnh8NhJRAITNq5a+bS0oMIgLlLa/Xq1cMHDhx4fmho6PdtP9k0FMY4EIvF7orFYnd1dXXBe++9p/A83yUIQjfP82Mcx8UAQFEUJU+W5XxJkmbK42dRTNnOakEQWnft2nWI9ex3K4pGo7c3ALqgmpqa/xcIBCakx3AKHACZWR0AUwcPPbGuuFKf/eH3+9PnfgiCAGj8Q4LIF0JFUWYb9QsOAsQtN0SbyX3hpZde0t2lbBZc18pWqf5jqINwRLt3734aIZTxUY7TXJwsy7Pi8fjaSCSyfWxsbM/Y2Nj7I5HIjng83iDL8myY4rQcNTU1z5ClwgghrPXPbtter3fIuZHeFgCA1+u9vH///vRqOa0guJ0gOcDEQLlWO2Zt8DyPWYLlbsEjk+W6areWasUVwhhzxPLgOA41NjYWYYwLdXafE7VpPogNuQWQK2YFLl26NN/oj+rxeLAaJFqgUN8n9/T8iWvWrOkvLi7+BctD3NbUSBCEtnvvvdd06a4eWMzgUlJS0ubYYG8LAADq6uq+x3EctgMOuyusshXv0GtfD0xuwYMOnnu93nQaEwITRVHQqVOn6kwOkQIAaDErwCq3AHLWrMDo6OgiAPNvB3aX+tL31W+2/fv3/xvHcbe/heam8KJFi77G83xGmUKN4LJ169aTgiC0OTTeW15er7dp7969h5wCB8DkydvI6pgqeGjVcxoeagmCACR4Tv8jKUz6+vpYUgiZzs+schMghn+8RCKxnP49E4iwuLToOkuXLh2tq6v7hulT3FbWFQwGX92+fbujB0epxfO8Mnfu3G8DgPWMirc1SfPmzfsumYidAIcTVkcuw8Psmh5ceJ5HxAoh7itZlpGiKGmQjI2N3RQAGQETP5ssy8vUYMimS+uxxx57wefzuTpR3ZY1IYQi27dv/7aTGwb1dM899xyZO3fu3yKE4m60f6vI5/Od2rNnz3tugMNNq0Mv3kHHWtra2gp+/OMfb//ud7/735555pm7L1y4UOwEPFiX69L3CTi8Xi9JnJj+hxBCiqIgnudx6vAyALiRxkTl0uoDAMeOaXVrFRbAOOXmGtyfd/78ec/ixYtl+qLW8l5adlZppdpV7xnBmzZt+rs333zz53D7HIec0MyZM5+aN2/epDTTBt8UM1qdtXfv3tcuXrx49siRI09EIpH3gQPH7t5qWrJkyVN293IATD761eryXyIWcACwWR2yLPPf+c53Pjs4OPggxthHrjc3NydLSkqee/jhh79ZWVmZoMozLdWly1iBB8D4/EXcVxzHcTzPo2QyiTweD5IkCQEAxONxXpblxXTwXCMe4pj1AeDuxLkCALYa3EeRSOSlhoaGSbGIVFpi3fThHMdNmjwwxsBxHOJ5HnieB1mewCXN+wsWLBg8ffq0LxqNrrHxfLfloLxeb9PHP/7xf7RicSCEdP+xLv0tLy+PrFq16k1Jkt4bHBycLzt4hsnNrkAg8N6DDz74I4DxCY+erARBAJ43nl6M4GGlPSfhAQDc17/+9a+PjIzsh8lfsLl4PL7i9OnTq1auXPnbQCCgZAMesiwjQRDA5/MhURQ5v9+PMMY8QohLJpM8mdd+97vfVbe0tHyMXoGlAZBfAYBhclIrcnM3sSnpOjs7F2rFN4jccmnR95944ol/9fl8p8zGelvuieO4sbvuuuuvBEGQnXJfaeXO0vsHALB58+bzn/rUpx6dM2fOl3medyTV9c2upUuXPmXVVQXgrLsqE5cVGQvd1w9+8IMPRyKR7UbtxePxhh/96EcPOwUPvTpEgUAAk9VWqfQlHL2Elzxba2vrHFLHYAlvo1H/VuUmQEwHGolElgJoB8mJzN4gmQbYCwsL5XvvvffPOI4bVrdzW1kRnjt37ldWrFihe6aJ2zER0i7P88q+ffteefDBB3+vvLz8KYSQYTryW1mBQODQjh07zpHfnQKHk5sCAYytDq29Jd3d3R9naXdgYOBBSZI4J+Bhdp+49BOJRBoc8o0kiph4YwYGBuYDGKZwB3DYheUmQJphPOeKriRJSqdXN4OI3VVaAObWyPbt27sXL17812Cycuy2nFdJScnP77vvPkunDRpZEk6ouLg48bGPfezpPXv2fLSgoOA3AJDRkuKbUHjVqlXfJROvG+DI1OoAsL7K6sKFC8WSJNVq1dFoo+Tw4cN1WvdY9qMRGd33eDyYtMHzPOJ5Hnk8njREAAAwxhwJoofD4ZXq2IcKJjIANLE8H6vcBIgM5rRbefHixbRjU8stRStTl5aRNfLII4+8VVZW9rTJeG/LQXm93qaPfOQj/0JPRCwTkp5Y3VWsmj9/fv/DDz/8d+vWrfvk7RV7NxQMBl/ftm3bZaMyBBpOgQPAmtVhZ4lub2+vpUzdQ0NDxeprrPs86DJ68EjdQ8lkEqWC54jeOEg2DyqKgmKxGCdJ0iq6DQ1L5CKYfKm3Krczqr5jct/z/PPPL5100SWXFoCxNfLFL37xW8Fg8HfGQ74tJ8TzfM/27dv/LBgMiuqJBAAmAcUuVNSyEhsh/zZv3nzp8ccf/8zixYs/JwjCVUcGMn2lrFu37nu6N1XQAHAGHG65rGj5/X7t7KI6EkUxnZDTbO+ZWizw4DgOUV98J8Q9BEEASZI44r565ZVX5gJAwOQMkLetPB+L3AaI6YD7+/vXGL2IWrLr0jILsPM8Lz/++OP/0+/3nzAb923ZF8dxQ1u3bv3MqlWreunr5G9E/6Pva0HFKbCwaPfu3e8+8sgjn6iurv6nWzVmVlBQ8NuNGze2qa/rWRvZBIfdjYGkL5Z+tKT3BdVuzINWMplEJPbh8XjSbitRFDlijSiKglpaWpbRbisdiJh9obesKQdILBZrADAmsZ6surTofrRcWgAAM2fOjH3yk598QhAEQxP9tuwJIRRfu3btnzY0NHQCTIaCWmZQ0WrDTcAIgiB/5CMfeX7//v0fKSkp+SlCyNK31mkuecOGDd8nv7C4qQCmFhxW4DE4OGjJhRUMBsNW4MESE6GtD7J3jd44SCwQAOASiQQCAEgmkzA6OloPYBpAn3YWSBeMp3bXFca4gT45UP3CZhIXIfXV18yskXnz5oXf//73f5rn+U6jtm/LmhBC0rJly764devWc1asDLW0oGL0bc4MMHaAU1NTM/bQQw99e/v27R+7VdyeRUVFL6xdu7bTipvKLXAAmJ5IyRyUJz9Ho9Ega98AAIFAYIz8bCW3lRk8iIj1QaAhjx8axdEpTJLJ8Ww88Xh8rXrvhwom3eBgEkUi10+VA3PqFT399NO1Pp8PfL7xTZ9uuLSsWiObN2/uuffeex+5DRFnhBASFyxY8Jf79u3TTXuRqetKDywskGHpT+vf2rVrOz/96U//+cqVKz/j9XqbM32dclUIIXH9+vU/sOqmosvpyQ44nLA61H1GIpEi1jEAAJSXl4cBnIeH2voQBAEIOOjAOfn5yJEj5YqiTNgAq2GJOG59ALibyoTobQD4hFGB1tbWVQDQDgDg8/kgkUik05PQ5bTSmNCymwYlVXfSGew7duzoLCws/P1f/OIXT4qiuMToGW5LXxzHjdXX139xz549E1YyqT/c9AmJWh809fvBaFLSO22RFSJWdffdd5/Ytm3bH/zqV796fygUekyW5Rlu9DNVKiws/OWqVav+f/auPE6K4t5/q6p7ZnaX5RA5FBVEvBUUURQkGsEjGg1GNMRojKjPM0TF6NMkL4nPxMQcJmqM+owxAmrUJMZETWJMUPDGGBGCgCCHwHLuws5M31Xvj+kaapuZ6e45dmdhv5/PfHZ2urq6une7v/P9nS3Frnkh0ghDXL9DWBRdFOIoddy2traCYbnFMHDgwEzUMN1iY4p9MXZdV5qrVOKgyPXyIZxzYts2oZTyDz744DAApbLPgRoRSD0oEGSz2XHq76oSKcekVYkaATr+0Y855pjNl1122aWpVKqs3ty7Oyilm8eOHXtlkDwKIUxlxFEV1TJVxYGmaXzKlCl/uvjii8/bc889H9hVEhEJIeakSZN+XervIT+Lcm2rqTiAylSHhOd5IpvNDo+xpi0HHHBAVu5baEw55BGmPgzDoK7rUtd1qbwmmzZtGh0SfQV0YwJZhFx13qLwPO/Tmzdv7vBZJSYtoDq+EfkPMHz48PRXv/rVq5uamv5Was4edISu66snTZo0bcKECcsKOVwjzlGx6SrO3NV4DRw40Jo2bdqvzznnnCm9e/f+E7p5ImLfvn2fPuSQQ7YAhUkDqA1xAOF+jnJ8HUHIc7EsK0opdABAIpFYru5bYPtO86so9fxSI6/UsiXyveu6FMgVE7Vtm5imOT5Y/ypAJlkANclj6gwC4QDmhIzp89BDDx1a6EKHkUhnqZGBAwfat91229cHDBhwH7r5A6Ez0NTUNOf888//yrHHHrs+eGOrZFItUin18IriG4njI4mKgw8+ePNVV111x9ixY7/SXUPDCSHZiRMn/ibMN1UK5RJHtZzkpVSHPKe1a9f2imOmTiaTK6pNHlJ9SAUiQ3cleTiOQwFQTdPyxWRffvnloZzzASHqYx5q1PumMwgEiFD98ZNPPpkAFL7gpUxaQOepkUQiwW+++eYHjz766EsZYxt3nqkHhBB78ODBP7322mu/vt9++21Xt5V64FdCKMXmL8dsFYdsor5OPPHED6+99tqrDzjggJsZY2vKObeuQv/+/Z8YMWJEPuclLmnUgjgq9XUAO39JfPnll49DDJ9wr169CkY0FeuCKhH2rJJQo638siXUdV3KOSc+kcB1XSxfvnx0CeUh8Zeo5xUXneFEB4DnwwZYljURwINAR8e23C5JpJSDHcjJv0Lzy3+mYk72YvsXcrJfeOGF/zr88MOn/O53v7vTMIzxYee2u4Axtm7MmDH/fdppp/1HOrGDN5H6dyvlRC9EIn78e0Wo1PdRzDkfZe7zzz9/zvbt21/7wx/+cMGGDRumcc5j5R10Niil2ydNmjQrzjUrNyEvjoMcqA5xADse+C0tLSdGWafEkCFDOtSUKidMV4XMOhdCENd1qa9EqOu6eSIBQB3HoZ7nwXVdwjlHW1vbCSH1rwDgxTjnFged1UhpG4CpAPYsMWYQgJkHH3xwvlGL7OGhDtI0DZ7n5dk2uJ0W6BUS3F6qVwT1e5EU6zcCAIwxDBgwwPzUpz71/MKFC9OZTOZoAJ2XEl1/EM3NzS9MmTLlpjFjxqwFctdIfXGes/oFvy2pf7/gPup+hfaVL0JIpzWCKrRG+YqCZDLJjzrqqA8GDx783Pr165OWZR2EOm1oNmDAgF+ddtppb4WNY4wJed/EBaVUlPrzcc5j9QUptYag6pDzbNmyRf/nP//5HSFEqujOHde87eqrr75LElWl5OG6LvHXQjjnlFJKdV1nnudRIQSzLEsDwHwykfkg2LBhQ+rdd9+9gXNOSyiQlQC+FeW8ykFn/uPuD2Bcie1k06ZNC0499dTl6oelSKTY9igkEoVICpGI2phK13WMHTv2/VQq9fwnn3wy2HGcyE64XQW6ri8fOXLkLZdccskT/fr1s4uNi0MKcUil2BxdQS5xsMcee5hjxox5Xdf1lzZt2jTIcZxhXb0mFZTSrVOnTv1mc3NzUckV9sAuMbeQjb+KIQ5xyLUU2+Z5HZtTBXO+fvOb35y+devWz0ZaPIDGxsZ/TJw48aXgXOWQBwCkUikQQmSoLmOMUUIIcxxHA8AIIdTzPOZ5HuWcEyEEXNfFX/7yl1Fbt249lXNeynz1BCJYgMpFZ5mwAOBvAGaUGrB9+/ZP67r+VwCQbRqBaCat4PYwk5Y/PjRvpNAcQbPWxIkT10+YMOHGX//61ycuWbLkVs/zIpWE7s4ghGQHDx784CWXXPJEKpXq0P6x1DUFCpsfSuWARM3/KGReiuNPqYaJLArUNR177LGrjz322K+/+OKLxyxZsuQG27YP7ow1hGHQoEGP7bXXXtng55XUjIpSDTmOqSpsPcXMVUGsW7duSti6VOy5556vB+crlzyAHQrE86vsEkKYbds0mUySbDZLCSHSjEVd15XXiLe0tBwbwXxVM/8H0LkE8gqANIBexQZ4njdx1apVbOjQoZ6u60IlEX/7Tr4PmXhYbHuU5EN/31gJiMHjJRIJXHnllfNWr179+VmzZl20adOmSzjn/YrN2V1BCHF69+79/EknnfTg6NGjCwYSqDd1GJlIxE0q9I8TObEwOGchlOu8rwY+85nPvDtp0qQvP/PMM59du3bt1ZzzUubemoIxtuncc8992n9f8TXpbOIAwitwSzz11FMjTdMcU3RAganHjx//etSaVqXgBxkQIQSR4bm6rlO/1zmVvT4sy2IAiG3bBACEENw0TZrNZieUKF0CABaAf8Q4t9joTBOWB2A8gINKjEktWbLk7YkTJ34CQJorivoiJDRN6+AbKWTSqqVvRD1mnz59vLFjx753+OGHP7Fy5co2wzAOFELEqrFTjyCEWP369Xtm0qRJt37+859/Ya+99spE2U9etyhmQxWVmq4KqYlS/otSr+Bx40CaXqK8dF0Xo0aNWnLggQf+YfXq1cI0zcPQuV/yAABDhgy5b8KECe+XY56SiGKmAsozVYX5OUqZq4Jjn3rqqe+5rjuk5CIVNDU1vXrJJZc8I/cvNCYqefi+DJJMJolpmqyhoYEKIRjnnGmaRh3HYZ7nacj1YmeO41DHcYQQQrz00kuHbNiw4bwQ89WrAB4utKFa6Ox/zucBnFVqwMaNG88C8Kb8Xdd1AYSbtICOZVAKba+WGgHCzVrDhg0zZ8yYMXPjxo2/feKJJ85Zv379ZZ7n7VPq3OsRhJDMHnvs8czEiRNnHXHEEVvk56XIuBSC3xyjKhQgnukqSk5H8P8j7nGrDbnmAQMGZK644or733vvvd/Pmzfvq5lM5jQAnWJeY4ytP++88/5Q7v7lqA2guooDCCcOAJg9e/YJpmkeV/LAAQwbNqwq5CHXKIQgtm1TXdfz0VZq7odlWcw3XVH1uq1cufLEkOKJAPBCnHMrB53tYBwMYC1K55+0f/Ob3xx7wAEH7JT4EjRpAcUfAtKsVWx7KSKRiPJwKxE2nP/ctm3Ytk2ffvrp0cuXL5+cTqcnCiGKmvLqALyhoeHNwYMHv/DZz3725QEDBlglB5dJJsUQh1TCEGa26g7429/+duSiRYu+alnW6Fofa7/99rt92rRpf4yzTxTSALqeONTxGzZsSN53332/i9rC1l/Lhttvv/20hoYGr9D2OOTB/BLtkigIIYxzrmmaRgkhzDAM3XVdzfM8ZhgGcxyHWJYFxhh3HEfcf//9s1zX7e95HoqoEAHgAIRUQ68UXRGh8k8AJ5caMHjw4EvvvPPOgrVbCpEIUJgoJIkU2w6EE0klJBI8rizS2NLSknz22Wcnrlu37rOGYZyALjBTFEIikViy5557/nns2LF/HTVq1CZ1WxwHc7UJBaguqRRCVxFNHHXz5JNPfnrlypXTHcfZt0ZrWT1jxowpwaCIQohKGkB8/wYQzfdSjuqQ+OEPf3hTa2vrl0MXomDAgAH333rrrfcHP49DHP5aiMw6l+RBCGGaplHOucY51xzH0RzH0TKZjOY4DnEchxBChOd5/KWXXjpk8eLFP5XkUYRA3gYwNs75lYOueHA9hRAC2bRp02dRpPhXIZMWUNzBDhRPPgRqa9aS6/LnySciDh482LrqqqteAPDCJ5980vDSSy8d09LScmw6nT7Otu3D0EkVAhhjn/Tq1eud/v37vz1mzJj5o0aN2hwcIx+s6kMgjEzUh0u1yKTQA6WapNJZZqpKMHXq1H+2tbXNe+aZZ76wYcOGy6qdiLjPPvs8VIo8KiENoD6II5FIYNasWce0traWrBAeBKV0+wUXXPBY8PO45CHXoDrOU6kUkc5yQgh1HIdaliV9HoRzThhjcBwHnHOxatWqCSppFPGB/DbO+ZWLrlAgAwGsQ2kHfmbGjBnHHXHEESW/Fna2GgGqZ9YCdigSFYsXL25+/fXXj2ltbT0wm83ub1nWMNd1h3LOe4cdtxgIIbamaasSicTKhoaGVc3NzR8feeSR/xo3btx6IPqDuNC39Lihr7VQJ4VQa8XS1fjoo4/6vPDCC1dt27bt86hCMIyu68tvvvnmqbqu5yMG4hAGUD5pANUnjuB4OfbVV1/d67nnnnsyboTkoEGDfnbLLbd0cEiXQx5SfaRSKZLNZlljYyMlhDDXdRljTMtms5oQQrMsi2WzWc2vukv8L8Hctm3x8MMPz3Zdt28J9SEADAVQ87I5XXWTvQRgUqkBgwYNuvzHP/7xK0D4g70c30ixEgm/SwAAIABJREFUMdUikVJzRSGS4Nj33ntvj4ULFw5tb2/fw7btPpZl9fU8LyWEyN9FhBDOGMskEolsIpFoa2pq2jpkyJC1Y8eOXa/rOo/iNK6ETID6JZQg6p1goobPzpkzZ/hbb711g2EYpZJ0Q9HU1PTKjTfeOEMlkCgoFvpcL8Shjl+7dm3qnnvumek4TqxcG0rpphtuuOEzQ4YMMYHo9ayKkYdqukomk8R1XQZAJ4SwbDabN10hV7qEeZ4Hx3GE67p8zpw5h3344Yd3qb6PAlGCrwGIVZqlXHTVTXQ5gP8rNYAx9udHH330Bvl7OSTiz9OlaqTUXOUQSaGxUYghOHc9kolEV5FKd8bTTz89bunSpTc4jhO5p0UQ/fr1e+KGG274Udi4ziANoHrEAeT8jvfee+/Pyqldt88++9x+4403PgWUpzqUzzuUZ5c+D+lAt21bs22bOY6jWZaleZ5HPc+jUn14nufNnDnz2mw2e2YJ5zkAfA3APXHPsxx0VQ2eVQBuKHV8IcRwQsjjhx56qAmE53IoMfux80YqyR2JktsQNYdEnoMs0xJ1bFj+Q6G5o+wTNX+jWN5EuWVFZP6A+oqaP7K74vDDD19z3HHH/X7VqlUb0+n0EUKIhrhzmKZ55IIFC/Tjjz9+p+ZpMl8j+LBS81zCEJbDAezI4wjmcpSav1Duhzp+48aN2j333PNzwzBifytPpVLzb7311u8nEolIZVuKkYea8+EXS6S6rjMhBHVdV7NtW/PDeJllWZoQgrmuS7PZLBVCCM4537RpU+qDDz64SQihqfdYABy5L+jpuOdaDrqKQAwAJwA4sMQYumrVqpazzz77/Q4fhjzUi5FIOQmIUY4nx0QlkkJzVYtISp2rhPqgj7qPeo5RzrNYEl4ldap6SCUcmqaJ0aNHL54/f/4B5ZZEMQzj6H/96197jB49+jVKadVIIypxqKiUODzPEx9//HHTAw888LNyyIMQYpx22mlXHXLIIW3ho0uThzRdASCMsQ6JgkII5jvOdT/rnFmWxSzLoq7rQgghHMfh//jHP05Kp9MnhiQPvgLgvrjnWi46qx9IIcwOG5DNZi/avn37Tp+HNZLSdV3IaC0VxZJ/ovQbqUS6Rp0reHy1K2KxsXK80rOk4PZCCM4fZR8gXq+HWvYAkb0jCr3iztVdUejcOecVVT7Ytm3b+XffffdPP/roo3yUV5yeKnH+P4r9z4dFVpW6T+T2f/7zn/s89NBDs8ptubDXXnv9/IwzzlgdNi7sXIPtaf3oq3zormmalHPOhBCUc858sxX1PA/S/8E5F5s3bz6rCGmoCH2uVhNdWUZ6GYBrAJSS2v0WLlz42sknn7yumJmpVmqkq8xahdZYSpFEGV+JKomjTOKqkzCFElelqCikWLqjelFLghR6FcLcuXM/H6c8RyG4rjts8eLFEznn8w888MCtUfaJYqICyjNTqfsV20fd/thjj53wxhtvPOB5XlnXoaGh4dXbbrvtB5U2q/M8jzDG0NDQAMdxKKU0b7qybZtxzpnjOIwxxgzD0IQQLJ1Oa67rEs/ziO+v5e++++7+LS0tF4eE7qYBXAqguDO1yujKBDYTwEzkHD5FsXbt2i+kUql3TdMsq5FUqbwRoHg5FDmmWO5IqWP684bmj4TNpX7LUvNIijnbg+cUHB+cr9Ac6je5OPsp2zskTJUaC4RX5q1VY6lKVEpcJ39nKyLP88oO+VbhOM5+r7zyyswlS5bcf+WVV84ORmhFdYYr69ppfJhjvNB+wX3U7evWrUs98sgjM7Zt2/YFlBkkpOv6x9OmTbs5mUwWjUiLqK7yrWkty6J+ljm1bZv6fc2pZVlMCKFlMhnN8zyazWaZEIKIXIkTQQgRQgj+0UcfnVqCOCSeRCf5PiS6upHNJ8ipkKIQQhyQSCQeO/zww23fHlhUHcRVI/78ZamRKMeUYypVJHKdch2FFEOhsaXGR1EXlSgT9ZyqXUixkFKpRK3ERZi6iaISagXTNMkrr7xyI6rX4ExLp9MnvP766+Mcx/ngoIMO2hLFpyFRSm1UU3EAwK9//esTX3jhhXt8f0e5yrX9lFNOmTZu3LiiLaujEmewzwellPo+D8oYY47jaIQQzbZt5jvNNcuymG3b1LZt+fzhra2t+qJFi24SQughJHIVcjl2nYZ6kPGvI+dQL4rGxsZvP/LII7MBwDTN/OflhuDGCfkFqhf2C8TLP4haIgUoHQJcaHyhfaKE9pY6VtT9JSrNxYhbfqQayqUeUMpf9MYbbwz561//+ucaHdrr06fPcyeffPKDJ5xwQkvRQWUqjaj7Bsc8//zzI956660Z5TjKVRBCnMMOO+y6K6+8cl6xMVH9nJRS4nlePmFQ0zSaSCSYbdvUcRydEMKEEJrjOFp7e7vueZ6WTqeZ67rMr50HzrnneZ738ssvT9i4ceNNJRIHAWABgFGVnH85qIcaTP+HEALJZrMXm6Y5O5VKIZXKdZ2UJi0gftXdcsxaQPHmVfKYQDiRRDVthc0ZZq4qNr7UPlFNVYXMXHH2V8bslGgVto+KUg7d7tJcSqLSXiTyWqxcuXJEVRZUGGzbtm3nPvfcc2e++uqrvzv22GOfOOWUU9YAxQNUakkcTz/99MhFixZ9OZPJnIrKA4LcESNG3FSMPKKqDvnsYX6xRGm6opQS33TFNE2jtm0zz/O0TCajcc6ZLNdu2zbxnefCtm1QSsWWLVvODpYuKYCSeXW1Qj18I2tCTnaVtNsOGjTosp///OevqJ/VqxqJclyJaimSQuuphiopNq4YqqVOJGqVMd4dq/RGiYD68Y9/fGNra+vFnbAcIFe1+fWhQ4f+9qyzznpjjz32cIDqkkZw3IoVK3q9+OKLn163bt1U27ZHlr/0jocYMWLETdOnT/9bcEMcP48kD7/WVT7ayjdhaYQQpus6M01TdxxHMwxD85WHbhgGdV2X+RFZwrZtD4D3zjvvHLxixYofhBCIAWBvAJHCjauJelAgGeRCz64uNWjjxo3/hVyMcx71qkbkcYHOUySF1lyJKlH3i6MsoqiTKPMo4wqFY1dMKuUUT6wm6dSqeGM6nS4rZLVMUMMwTvzwww9PXLp0aXtTU9Pcvfba6+Vx48a9c/jhh28rtlNc4pg7d+5e77///nEbN2481TTNE4RSvqcKcEeMGHFLJeShRmpJ8kgkEnAch+q6DhmiSyllfq0r5uV6nGuO4zDHcYjrusxxHOqH7YJzLhhj3po1az4XEnkFAM+gC8gDqA8FAgBHAXgvbNAhhxxy9re+9a3/FHr4VEONALuWIim0pjBVUmifYvvFVRVxSrWUg1qple6Ct956a/Bzzz33YlevA4DQdf3jxsbGBb17917Up0+fT4YMGbJm5MiR6/v3759n4SBptLS0JN9+++19Wlpa9m1ra9u3vb39cNM0R3ueN7gWi6SUto4cOfKGadOmvaN+Hld1KPPl/R6GYRBZpp2QXO6g79/QPM/TM5mM5rqu1t7eLh3nzHVd4jiO8OteOcuWLdtr0aJF93HOSQiBjEfOl9zpqKcb7mUAp5QawBj702OPPXa9/77g2sOIpBYkAnQtkUSZtxwiKbRfqX3rjVCC2NUIJvigu/vuuy/bsGHDV6Pu39TU9LJhGKPjVqatAIJS2k4IMSmlJiEk43lesxCiQQiREp3Y+lnX9Y9OO+20604//fQOFWvLUR1A7v6Tfg/P7ypICGGJRIJZlqWpTaJM09Rs22a2bWvpdFrza18R13WJZVmcc+4SQtwXXnjhvwzDODMk8/xNhPiQa4muDuNVsQFAyRr9QogDW1tbnxk9enQ6LCFQhvyWkwyohI52GFMqfDVO6G81w3+jzhsltDfKfkDh8N5iY0shGKpbbK648xZDMKy42KurkwyZUv6j1EuFbdv0xRdf/F8hROQckOOPP/7mo446atbKlSuP8Dxvr6qfyM4gQoikEKKJc97H87wBQojeQohGANU0S5VEU1PTy1dcccW1xx13XL7/TdQkSKAwecgeH4SQfMgupVSjlFLXdZlhGDohhPm1rpht25JINMdxqGEY1PM84T+3vPXr1/deuXLlDUIIFpL7MQPAonKvRaWop29kBMBCAIeVGqTr+sOPPvronepn5aoRoPsoEqD2qgSoTJmU2r9cRVGuyW13w+zZs4//4IMPHog6njG2/vbbbz8DAEzTZL/4xS+u27p161fQteWNagpCSHq//fa7c8aMGc/Kz8o1V6mQqoP6VXYbGxup53ma67pMOs99otC2bdumeZ6nZbNZzTRNTda8sm0bQghu27YnhHD+8Y9/nJ/JZC4MMV19BOBg5AoodgnqSYEAQBbA5FIDOOeHplKpWQcddFD+CR1VjZSTgAiUr0iiJO1FVSTq2FqpEvVcy1EmpfYvV0kUSioMrquYWqlUsXQn/P73v/+u67p7Rx3ft2/fP5188smvMcaQTCbFhAkT3mpvb39948aNR3ie17+Wa+0KpFKpt84666wrv/SlL70DxFccpcYSQoiu68TzPNmWljmOw3wFwgzD0BzH0bLZLOOcM9u2Nf8zZpqmmvfBhRBeOp3Wly1b9nVfrZVSH98B8Fa8K1Fd1NvNlQCwEkBJOZ1MJn82c+bMe+Iog1qrkVLzqmqk1Lioa5Aox6ZfjuMdiK5Miu0fNkcUFWEYBnvnnXcGCyHImDFjWpqamtxy1xj32PWAYrkWs2bNGr948eKdenWXwvjx478wefLkD4OfG4bBfvGLX1yycePGK4UQqXLXWi9gjK3fZ5997r/uuuueTSaTPI7iAEr3//DzNEhDQwPhnFNZHFH6PKTfw8/5kO/zfo9MJkP93A84jiMAeJ7n2fPmzftse3v7NOn7KILNAIYhF8XaZajHG+ebAP43ZEz2wgsvHD958uRtQLyOhLsikQDVN29JVEomxeaIMo/c78MPP2z+/e9/f+W2bdvO4Zz3AQBCSLZ3794vnHPOOfeNHDmyNco6yiWYqCj19wyrcFwuHMeh3//+95+wbfuQqPskEokl3/ve9y4oNWbevHkD58yZc8X27dvPFULUf8P4AAgh2T333PPhr3zlK7/Zd999zWoSh1/tN1+iXdM0KgINogCw7du3azLb3LIszbIszTAM6fugmUyGWZZFHMeB67oeIcRNp9PavHnzHhRCNIeojzsAfCvOOdUC9UggfZHr5dur1CBd1++fPXv2j+Xvcf0UkkgqfYh3dyKJc4xakkmxud59990Bzz777K8cxxlWaB9K6eZJkyZdeuqpp4aW3Y6CWpNMXIQl5d19990Xr1u37qY4c+67777fnz59+m/l76XIbe7cuXvPmzfvqm3btp2N+jN57wRK6fa+ffs+fcYZZzx2/PHHbwaq4+eQkOSRSCSg6zqllBLHcZiMupJ+Dz+vowN5qH4PwzCYZVnUJw8uhPAA2HPnzp2cTqcvDiEPA8ABANZHPa9aoR4JBAB+hpAqvQDMc845Z8JFF120Rf2wK9RIseOWmheoPyKJc5xyVUWcuQDgtttue9g0zeNK7a/r+qorrrjiwv33379TK5F2NV566aX9XnrppWeEEMmo+1BKW7/2ta+dNmjQIKvYmEKk9frrrw+cM2fOeVu3bj2Pcz6wzCXXDIyx1YMHD35s6tSpzw4dOtSIqziAcNXh/+xAHlJ5SKe57PORzWbz+R4iV6JddxyHOo6jbd++XfMd58RxHOHlnHpuW1tbcv78+b/knDeVIA8AeBC5woldjnolkMEAlgNoLDVI1/WHZ8+e/f3g5+WqkVJj6oVI4qxFojuRiTrfrFmzjvnXv/716yj7NDU1/eO22267Ifjg6C7+jbjYsmWLfvfddz9sWdZRcfYbMGDAfTNmzHhI/h63z3gmk9FmzZp18tq1a88xTXNcHPKqNiilrc3NzX8fNmzYixdddNE75fg4gGjEIdHQ0EAsy6K9evVCJpPpoDxc12VCCM22bU3me3ieJ9UHcxxHS6fTzLbtvOnKbxblUkrt11577bxsNvvFEPVhATgIQFUUd6Wo55vrRwDCpLn9mc985qRLL710Q6GN3Y1IgOjhv3HWoqLWZAJUj1B++MMfXrd58+Yro44fMGDAvTNmzIhVVK47EozneeLOO+/8n23btk2Jsx+ltO3qq68+84ADDiiq1OL4atatW5f685//PL6lpeWUTCYznnNe6+gtmeE+f+jQoS9deOGFbzU2NnpAPDOVRBRzlXyfTCbh17YiDQ0NxDTNvNNckgfnXDNNU/eLI2qu62qO4zDp98hkMpppmvmwXdd1heu6HICzZcuW1IIFCx7wEypLLesXAK6Le661Qj3fPAOQUyHNpQbpuv7Y7Nmzv1Nsey1IBOhcIqnWWlRUkpUd93jlEsodd9zx7ZgPSX7kkUdec+mll+5U1qEWvo1Kyadcx/q99947de3atbfF3W/IkCF3zpgx44lKjy8RVC8vv/zyPgsXLhzV2to6MpPJHOG67n6c875lTs8ZYy26rq9ubGxcMnDgwPnHHXfcv8eMGdOhO2KtiQPoSB6MMcI5p7quUwBMNVul02ldCKHJiCsZpmsYhp7NZmU4rzRdwbIs7nmem0gkrNdee+2LpmmeF0IeBoAR6OSeH6VQzwQC5CINvhEyxh03btzE66+/fk2pQfVKJGHz19q8BdQHmUioD/o777zza1u3br08zvyEkPRRRx117cUXXxxaWy3s+PWGRCKBX/7yl6cvW7bsh4iZ8Kfr+spvfetbkxsaGoon90Q4fjEUI6Ply5f3+uCDD4asX79+H8Mw9nBdNyWESDmOI4NkvEQikWaMZTVNMxobG9v23nvv1WPHjv1k8ODBRf8YnUUcQO5/XEZccc6prLQrneWcc81xnHzEleM4LOg0z2QyumVZVDrOpekKgLNp06be//nPf+6NYA78CcKtMp2KeieQfgA+BtCn1CBCyN8ff/zxK6J8I+xKs1ap45eaH+gcIgEqrxdVznGLncuTTz458o033pgddz5CSHbUqFHXfulLX5of53j1jgceeODUpUuX3oX40VDiqKOOmlbsehRDXP9IGMIe4GEohzSiHLcYcQAdySOVSpFMJsMopUSNuJIE4ud25J3mlmUx0zQlkTDFcQ7P81wALmPMmjdv3rWu6346RH1kAAwHULRTYleg3sPyTORac346ZNzwt956651JkyatCcs+LpRRDhRubQtEz2aPmk1eLKtdriFKra2wseqaoq6r0H7l1IQq57jFssePOOKIDa+88srhrusOi7kMfcOGDWe0tLQsGDVq1Nqw49VzJrts23rvvfd+bsWKFd9DGS0Y+vTp8+R1113321Jj1Daz8lVsLSFO3g6QWdxRs74LIU7WeKFjF0OwJW4ymYSm7bi8ssYVIYSmUinS3t5OGWPU7yZIPc/TCSHMNE1NCKFls1mNc55XHp7nMb/qLrNtO1+unedaDXJCiPvRRx+N2LZt2+URrudPADwX+yLUGPVOIADwbwD/hZCIrO3btx950kknPdHU1CSikEg5pUlc1y05rjOJJFi4MQqZxCESdb9qkEm5hMIY+/eyZcs+V0a0j7Zx48YzFi1atP34449fGHfthdbSFS/btuldd911Y0tLy40oo04VY2z15ZdfPqNPnz4dyqjHJYuohAFUlzS6gjiADgUSKZArVskYy5cq8c1XmuM4zPO8fHMox3FkgUQtk8lotm1LPwi1LAuu68LzAYAvXrz4RiFEWPDBNgBfQM4HUlfoDgRiAXABnB4yrv/cuXM3XXDBBQtKqQUVcYlEVSOlxnUGkajrqbUqCe5bDpkE54i6hmHDhrUvX7585datWz9TxiFZe3v7p958882h+++//+vqQ7Q74L333tvjoYce+kl7e/s55exPCLHGjx9/1Yknnri+VmQBdCSMSkgDqFxtVEocwA7ykOYrzjl1XZclk0lqGAZzXVcTQjDXdTW/uq7mOI7uV9hlpmnq2WyWSROW7/sgslGUEIJTSt0PPvjgBNM0z4pwet8D8NfYF6UT0B0IBADeBTAVQEmmtm17tK7rT44cOdIqVdI9iLgP8EJEUmmhxChEUgtV0lVkEpyn1FqOPfbYj995550mwzBi5TxI2LZ90HvvvTcpnU7/e+TIkZsLFWgMKx7Z2XjwwQcnzZ07937HcQ4ud46hQ4feftlll+V7fBciirhkAVSXMIDaqg0gOnEAOfLQNE14nkcZY8SyLCqEYH65EiaEYIwx5rquJgnEtm1JHlrA56GZpklt2ya+8oAQwvM8z7EsS1+9evV/A2gIOcXVAC5E7kt03aE7ORPPRgQboK7rjzz11FP5WlpRo6kkynFyVztiK2wdYccBdna6R9kHKN/5LlHtpk1yPbZt0+9+97v3GIZxcgXT8T59+jx17rnn3n/00UdHqp/V2ZgzZ85ef//7329sb28/o5J5+vTp89tvf/vbYTXlIqFS53chlOsQl4iyplLO8UKQ5ME5p8lkskOioPR7SB8HIYQFy5TIcF3/M+qbsIjjOMRxHCFy5UpcIYS5YMGCKaZplqxH5uMCAE9HGNcl6C4KBACWAhiHXA2YouCcj1yxYsULEyZM2ApEc4KrCFMC5TrageopErmWKOatOCYudY3lKJPg/pWok+B8uq6L/fbbb+77778/3vO8AWVORyzLOmLBggWTFyxYkB01atRixhgv5n/oTAf6ihUrmu67776r3nvvvR9alhW5MGIhNDU1vfyNb3zjG+WGugZVYTXAAk2yykFU30ocxSFhWRYSiQRM06SNjY158tA0jQLQJHmYpskA5H0cvqNcl8ojSB62bVPXdcE5BwCXEOJs3rx5z02bNkXxac0FcHP4lek6dCcFAgCHI+dUL/nfQAh574EHHjh/4MCBO9kkqqVISu1bC0VSai1RjgWUr0qAypUJUB11Mn/+/D2eeOKJXzuOM6LSuRhjLXvuuecTZ5555jNHHnnktkrnKwdvvvnmwL///e9fbGtru0BWGq4EqVTqjRtvvPGaPffcM9TfUwtloaJSlQFEX2OhkOIwxSH3c12XJJNJmKZJm5uboWaZS+WRzWZ1z/MYIYRZlqUbhsFkYyiZaW4YBpOZ54ZhUNu28zkfnuc5ABxN0+z58+d/k3M+MmRpHMCxAP4V5fy7Ct2NQADgHgChfZ8bGxv/Z/bs2TMLbYtLIkBtiQToXPMW0PVkApRPKK+//vrA3/3ud484jrN/NdZBCDF79+793KGHHvq788477z/VePCVQjqd1p588snj16xZ81nfVBU7NLcQGhoaXr/mmmumDxkyxFQ/rzVRSFTzunUGcQC5/+VC5JFKpYjneZpt25Rzrtm2rcmQXVnjSpKHbdssk8loKnlYlsVktjmllHue52iaZi1evHh8Op2O0rf+YQBXRLkGXYnuSCD9ASxBiEMdgDFx4sSJ11xzzbpipojO8I/EPU41iSTK8YD6IBOJqKQyf/78PZ588skHbNs+vJrHp5RubG5ufnXvvfeec+aZZ74ZfBiXi/nz5/d/5513jm5paTkpk8mcUg21oaKhoeGVr33tazfsvffeRavs1gLdkTQkCpGHruvSbMUMw8i3pM1ms/kCiZxzmVnOZI2rIHn45ivOORcAHMaY3d7e3rh06dK7EdKqAsB25FrVtkS5Hl2J7kggQE6B3BM2iBAy5/HHH780kUgIAEVt2t2dSMLWFOV4EpWQCdC5hLJ8+fKmhx566G7DMMZX85gShBBH1/XlyWTyo6ampqV77LHH0iFDhqwZMGBAesiQIel99923A7lks1m2ePHi3h9//PGg9evX79ve3r5fJpPZ3zTNo4v1M6kG+vXr99gtt9zyY1lYsFaohTKLo46qRRzAzuThui6RZiuUIA+/vpVu2zY1DEP3+3popmkyJXSXOI4DIYQnhPAopU4qlTLffvvt6Z7nnRjhVG9Grphs3aO7EggD8CaAMWED+/btO/1Xv/pVPnorCokAnUckYWOrTSRhx1NRb2SiQhJLNptld91114ytW7deUqtjlYBLKW0HQEWuimqnljYnhDj77rvvHTfddNMztZi/Vqa8ziCNYvsC5SsPx3Hk78xxHK29vV0LkocsVeK6rpDkoWmatXz58pGtra23Rlj2BwCOAdAtcpa6UxSWCgHgbQCXIeQcTNM8XtO0pw477DAT2BGJRAgpK7dDRaXZ5GEJiUD8LHI1ryEsgivsHEtFckW5PuVmokeBnDOZTPJTTjnltSVLlqxsa2sbB6B0AafqggohGkSud3hV/BhRwRhrGTVq1PRrr73271WYa6fIq2pFXwHx80bUfBUVUaKp1P0LQZIHpZSkUikSJA+/um5s8rBtWzrNiR9xxQF4jDHHNE199erVtyGkmgYAD8Bk1EmvjyjorgQCABuQS8KZEDKu4T//+c/g888//y/qh1GIJOqDsjOJpBwyKTW+WmTS1YRywgknLKOU/mXlypVHep43uFrz1iOam5v/9OUvf/na008/fWWc/WpNFCriljMJI40w4ii2vwrXdUlTU5MAQBljBcnDsqwO5GHbNrNtW5PkIX0eQfLwneaUcw7OuXBdl2ua5mqaZi9cuPBLnPNRES7DPQB+FWFc3aC7mrAkUgDeR65DV0n069fvuocffvjPhbaVevBVM2IrbI64ZrRyTERRTFxRji1RyMwVZ/8gKjV7ZbNZ9pOf/OSiDRs2fFUIEfaNr1uBUto6fPjw26dPn/63QttrHT1WCuVEehUzMUU1UZWaQ4Wu68JxHMIYy1fWleQBIJ8kqJKHbAolkwQlechcj2w2S03T1CR5uK5L/S+dnuu6nq7rNiHEWrly5ZGtra1ReresAnAEgG7Vlrk7KxAgl96/AMBXEEKGpmlO2LJlyx/Hjx+/PeiYLaZGgK5RJMHj1UKV1EKZVKJOCp1TOSpF13Vx0kknva/r+p/XrFmzt+M4w+PsX48ghDh9+vR56otf/OL1553B/6QvAAAgAElEQVR33sJCKqJWSqIYyi1nUqnSKDVHELquC8YYguTBOac0t2gmy7I7jqMRQpjneUz4lXULkYdhGMwwDGbbtub39mCO48hkQeF5nkcI8SiljmVZTWvWrPkmcl90w/BFAP+JMK6u0N0ViMQDAEJbnxJC3v7Nb34ztV+/fh4A2LZd8PzrRZEEjxdlfLnf4KutTIDi6iTuPIUQ9Tx/9atfjV64cOHXbduOYkKoOzQ1Nf395JNP/vGZZ57ZZXbxSvJISimEaisNCV3X82MLkQchhMmf0myVTCaJrKKbTqc113W19vb2ncjDNE1m23Zeefg/5Ro9QojLGLM1TbP+/e9/38w5Hx1hybMBXBT5YtQRdhUC6QNgEYAhYQMbGhp+9NRTT92nfhaXSMqJ2AIqC7Ut55j1RCZAbQkFKH2+999//4nLly+/wjTNYys9TieANzU1vXzwwQf/5rLLLuu0TORqJRxWwzQVNlcQKmlIUL8NbZA8NE2jjuPkW9GapslkbStJHr4CYTLDXBZI9JUHs22bmqYpneaCcy4opQ4AO5FIWEuWLJmUzWYvi7D0zQAO9X92O+wqBAIAZwH4E8LPyTvkkEPO/dGPfvS++mExEgHqi0jKOW4lfoWoZBJlHUGUIpRy5isFeQ1mzpw5ctGiRVPT6fQZfvRU3YAQkunTp88fJkyYMPOMM84o2aK5ElQzMz3sAV9L0gAKE4fjOETtY97Q0EDS6TSTDnPTNDXqt6RVycMwjLzZyrIsGZqrFSAPmeshI66EEMIFYGuaZm7ZsmXw2rVrf4hcM7wwfAHAU1HPt96wKxEIANwP4OoI41bOmDHjrJNPPnknh9WuTCRA/ZKJRGeRynvvvdf7z3/+81mbN28+0zTN0SijWVM1QAixU6nUvMGDB/9l8uTJ/xwxYkSm0jlrWbqkqwkDKEwaEpI8ZEVd0zQp5zzvMBdCUKk8LMvSPM9jvuKQP7VsNst8BznLZrP5LHOFPKht24RzDiEEF0K4vunKAoBFixZ9TwixX4RTeQxAV+QvVQ27GoE0AJgP4LCwgYyx3z377LM3FtvemUQCVNdPEvXYnUUmUddTCGGEUsncEnPnzh0wZ86cT7e2to43DON4znnvSuYLA2OspbGxcX7//v3nnX322f885JBD2kuN76xaVkFEebCXQxhR51ZRijQkVH+HJA9CCNN1Hb7KYKrfQ5KHrzY0x3FYOp3WJHnIUN0i5EF4rjuUJ4RwdV23ksmkuWDBgktd141Sin8FgKMAlPzb1zt2NQIBcn+UNwGE/mf36tXrm0888UTBgosSlTrageoRSZS5yj12peGznUUoElGIpZzjZDIZ9qc//WnEihUrjmxrazvSMIyDXNcdxjnvW8YyOWOsRdf11clk8uN+/fr9e/To0e+cfvrp68uYq2aI+jAvlyziHkciCmlIFPJ3UEqJ9HfIcux+f3LN8zzZz4P6HQWjkgd1XVcAAOfcA+Dqum4nEglr+fLlJ2zfvj1KoUQXufy1N+Ncj3rErkggAHAjck3ow+AdcMABU372s5+FOiq7G5FUcvzOJhOgOqapqKRSzjHfeeedvsuXLx+0cePGAZlMZg/XdVOu6+aViqZpGU3TDF3XjcbGxu0DBgzYeOKJJ67Za6+97FiLqhHiPrwrJYtyjgnEIw0JlTyk+cpxHJZMJolUHn6GeZ48/ARBZhiG7jgOUx3mpmnqfmtaZlmWbBBFTNMknucRzrkghHBfediMMWvLli17r1u37vuI5vf4NoDb455nPWJXJRAC4G8AJkUYu3Hy5MlnXnbZZZuiTFxvRBJlvnJNXEB16lmVQyhAdZ3occkliGqupZoo5yEtUQ2SUFHuWsohDWCHv8N1XdLc3AxKKUmn07L9bN7noSYI+jkbeZXhF0fM9/OQyiOTyWiu61LZltayrDx5IFdKydE0zWGMWY7j6EuWLPkBgIERlj0PwMnIlS3p9qjLm6JK2Au5wmRhZd9BCHn7oYcemjpgwAA36oOis4kEqI0qibOOahVHLJdQgNo9yCslmHpFtUlCohLiKpcwVKiRVqqzXHYRbG9v1zRNo5ZlaUIIahhG3udh2zYTQrBgqG6APJjfFIpJ8nAcB34HS49S6iQSCVPXdef999+/hXN+VIRlb0POxL6y0vOvF+zKBAIA5wB4FhHOU9f1Xz399NPflb9HeVCV42iXKCchUaJaFXfrgUyAyggF6Bp10FWEUytCKIVKyAKoDmFI+BnwHUxWpmlSAIxSSlRnuWEYTAhBHcfRPM9jspdHIFRXsyyL+V0Fmf+e+uauDuRBCBGEEJdS6ui6bieTSWPhwoXn27Y9JeLypwL4bbWuRT1gVycQAPhfAN+MMrBv377TH3300Wfl75WqESAekcQ5pkS1+oBUQiZAfRGKino1PdUjKiUKiWoSBrAjCs11XZJIJBB0lkvl4TgOs207n2HueZ5amoS5rpuvqivJwzdfMd9hzhSnOvW7EUry4LJEie80N1euXDmytbX1vxHtOfozADdU87rUA3aHm4sBeB7A6RHG2sOHD//iT3/603c6TFAFIgG61rwVZ856IhOJapKKxO5ILtUiCRXVJgxg59BlVXFQSok0WQkhqKZp+ffSZCVb0Ko5HjKqyjdPqdnlLJvN5suTmKZJPc+T5EEIIR4ATil1dV23GGPW1q1b91q7du0diFbnai6AiegmPT7iYHe5gfZALj9k/whjt51yyilnTp8+fadM4DgPnHJVSaVEAtQXmQC1bSxVC2IJorsQTS3IIYhakIVEsXyXQiYrNUzXNE1NkkcqlaLZbDZvsrJtm3meJ30czHEcLZvNskwmw2zblqTCfPXC/Egr5nke8cN1hRCCa5rm+BFXZiaT6btixYo7APSLcFprkWsQtaGKl6pu0C1ujCrhaOQiIKKU+F7+la985dzJkye3FdrYGUQCdI4qiTNvNcgEqC2hSHQGsezqqCVZAOEJkoVMVq7rElV5wO/jwTnX/IZOHfwdjuMwtShiJpORkVXMzzBnfjn2vPJQm0IJIThjzGWM2bquW57nkQ8//PC7QogoX0ZtAJ8G8HrlV6s+0d3LucdBC4BPAJwbYewe77///jGHHHLIHwcPHrxTuF2cEuWydHqh3t6lysgD8RpOlTp2LUq3B9cUZ221bCwloZ578FWL43VXyJLnhV61QNRGU5I0dF0nmqbBT+CjruuyRCJBOedMCKEB0DzP00zTZPK9b6bSbNvWtm/frvv5Hprf/En6PPIRWH51XVmWPV/finMuNE2TEVc2pdT78MMPb+Cch1a68DEdwO8rumB1jt3xRroXwHVRBjLGnn/ssceu7devn1dKSXQXRSJRi2q7hdRJ3DkkOkOhlMKupF5qrSLCUE4ZFkopsW07H6Lb3t7OdF2nlFKSSCRkZBVzXZcxxmgmk9mpppUfjpsvWyL7eChOdOr3AZGtaKXfA36uh6dpmoy4spLJpLVgwYLLXdeNklsGAI8CuDTuuXc37DI3SgwkALwI4JQog5PJ5D1/+MMffiR/7wwiAXrIJIiuJpUoqCXxdDURREGlfUPUfuWKAqG2bbNUKkX85k1MJgmappmPtJL+DjnGL8suzVZ5H4c0Wfk9zJlt23mHuUIePEAe5uLFiycbhjE14um8hdzzJVvu9eguqPubskbog5xdMpIU7dWr17eeeuqpR9XP6pVI4h5fRa36gBQjlHLmCqI7EMuuiEoLPAYd/tK/QSklzc3NHRIDZR8Py7LyIbpqmK5vmsonAkrzlN85kBmGISvqUl+RSPIhkjyUEiUeY0yaraxEImEuW7ZsXDqdjlLjCgA+AjAOQKTKFt0du/PNNwI5EhkQYazo27fv1x9//PGdkoDqhUiA6qkSoHZkAtSWUCR6iKV6qEY14GIRYlJ1NDQ05AlE5nb4//Msm80yTdOo67oMvvJwXZfKiCrpLFdVhyQPpZ4V881WmnSW+6+88iCEcMZYPlFQ0zRj1apVx2zbtm0Goj0rtwE4AcDiSq9Xd8HufpONBfAPRIvMEv3797925syZfyq0sVpEEjYX0LmqBKh9H5BShFLunMXQQyyFUe2S8WEhxYwxkkwm8yXYE4lEB9Whkofs3+F5Hslms5rf06ODyUpGWlmWpaXTaenb0AzDoI7jaKrJSvo7/MAWwjnnMlHQr29lJhIJc82aNUf6iYJResXYAD6D3PNkt0HPzZQrd/J7RItI8wYPHnzFI4888lKxAWEP/65WJXHXEERnlW3vTFIJYlckmVr3FAkjjFRqR76d4zj5nI4w1eFHX+XNVWolXVkM0e8cmPdx+J0DqTRlua5LfZMVVX0eAKTy8Pwsc1vTNDuZTJqffPLJQVu3bv0GolXXFQAuRq63+W6FXe5GKRPXA7g74lh76NChl/7yl798teSgTiQSoHuQSSXHCyOUSuevFJ1NOvXcZEolCxWyAGIp1cE5p9lslgkh8v4O6SznnLNsNss8z9Nc16XSZBX0d7iuS7PZrKymy3ylkk8QlA5z5JIEPWm2kuSxYcOG/Tds2PAtRMsyB4BbAfwg6jXcldBDIDsQtR0uABjDhw+/6L777ns7bGA1iSTKfFFzRKrpL5Hoij4g9U4s3RVxstqLEYYKSimRxAEAhmHQhoYGwjmnrut2aPykliRxHCdfgl2WV/c8j7a3t2uccyr9HVJ5FDJZKf4OGW0lOOecMcZlcURJHps3bx6ybt267wBoinj6swFcFPVa7Wroual2gCHXo/jCiOMzw4cP/3IUEpHoTD8JUD6ZlLOeILq6B0hUYqn2cbsT4pY+iUIUQQRVB6WUWJYFtYaVpmkdVIcQgmYyGQ1A3lEOgFqWpdm2TdUugXFMVr6zHMh1iuSEEFeWKNE0zdy8efM+69at+x8AvSKe3rMAzkeuw+Buid3upgkBA/A0omWrA4C57777Trv//vtfraZJqqvIpBb5GxL10gMkLrEE0R2IptKaWOUQRRCSOCzLyicEGoZBhRD5GlZqeK4MzVVVB+ecSdXhOI6aGJhvDhVmsvLLkkh/BwBwGW2lkodvtvoGogXUALmGdWcj5zzfbVH3N0MXIAHgjwDOiDjeHjRo0DUPP/zwX4Dq+jZqQSRA1yoTiXruAVIpydQ7qkEQxWCaJlKpVN5RDuT+VoZhUF3X845ySRxq0yc/Oop5nsfS6bSGgOrwq+XKDoEdHOi+2sibrHwCyed4EEIEpVRGW7mapjmJRMJijFnr1q07ZPPmzbcAiNps5VXkIq52+UTBMPQQSGE0IlcC/uSI473+/ft/rZxeIkD1iSTKnEB0IgFqSyYS1cjk7gqF0NWEU0tCKIWg0pFmKtVk5TgOEULkTVWyDIlUIlAyyoUQ1DRNLUx1yEKIMsRX+js8z6OmaRLOOfU8j2LH803AVx6EEFfXdVtW1l2zZs3I1tbWmxAt2goA3gZwGnI5H7s9egikOJoBvIRcrkgUiH79+t3yzDPPPJ7N7vhiUm0VUa9kAtQnoUh0B9NTvSLMJOY4DlFVh2quUsuuy9+lk5xSSqSvI47qUB3ljuMQX4FIs5UkjnykFXzy0DTNkeVJGGPW6tWrj21ra7se0fI8gFyL7JMBbC33Wu5q6LmpSqMvgDkARkXdoVevXt/94x//+H8AUG9EEmVeiUrMXEDtHti1qje1OxNMuT6TYsQhOwVSSqUZi1mWRQuF5gohqCQOmRSoqg41o9xxHGZZFvU/k/khVIYCE0Kk+iAAQAgRADyfPGw1w3z58uWfSqfT1yD6M3ApgAkANpZzrXZV7LY3TQwMAPBX5PqJREIymXxw5syZ3+/fv78HdCQSoPo5ILVSJRL1qE6C6KwKut2NaGrRZCpIHECuV7v0c8h8Dk3TaCaTYX5xxLyT3LbtvJNcLUVSSHVI8pDdAqW/Q/7knBO/HwgBQBTy4MgpD89XHramaaau6/bSpUsnG4bxxRinvAS5joJrq30tuzu61c3QhegH4AUAx0fdgTH2/B133HH9cccdZ8jPKiESoOtVCRCPTICuIxSJXak0e1fDcRzS3NwsVOKglBKpOtRkQCiqQxJHIXOV4zjM8zwaVB2maeZ9HbLxk23b1CcgJsuRCCE6qA6gI3lQSqW/wyKEeEuWLLnCdd1Pxzjt95Frh71LdhSsFD03V3T0AvAcch3GIoEQ8u7UqVOnXX755VvUz2tNJOXMGWduibhkAnROIcWo6CGXwgiWji+kOGTJdVmCJJVKdVAdKnGo5ipZhkQSQzabpY7jaKZpEtmb3HXdfESV34aWeZ5HDcMoqDocx6H+mkTOisU9TdNcQohsQ2txzrWlS5feyDkfGeNSvI1cNGZrta7troaeGygeGpDLEzkrxj6rx40bd/F3vvOdj4COD8lKiQSoLZlEnV+iuxNKIeyKJBO1t0gU4lBzOhzH6WCu8kNqWdBcZVkWtW2bytLrnHNq2zbziyDmx8i+HTJE11cd+aguWZbEXy73a1pxxphDKXU1TbM1TbMymUyfVatW3SqE2DfGZZqDXJ289lgXdzfDLndzdAISyJUvmBJjn23Dhw+/7Oc///mbANDY2AjLsjpc+0L9EeIsKuqDvrPIBKg+oQD1QSph6EzSqUWjqTDikGaqVCpF/KKGHUJ0/dIjzHVdKvt1+OXXO/g6/Iq5anHEfFKhZVlUVR1qKRJf3RDkIqwAIN/Hwy9NYuu6bicSCWvz5s37rVu37lbkAmKi4kXk7u/dPs8jDHV/M9YpGIBHAHw56g6EEKdfv363Pf3000+on6sPWcMwKiYSoPaqJOoxVJRDJhJR8iy6A7HUO6IqDpU4ZFKgJA7HcahlWXlzlUocsjeHVBQywkpGV/lhuR3yOhTVwVzXhSzBLtcs/R1+QURJHlYikbBWr149prW1dTqiJwgCwO+QK2e0W2eYR0XPTVc+CIAfA7gx8g6EQNf1WXfcccd3jjjiCEvd1tDQkH9vGAaSyaToDiauOMdRUQmhAD1FFKsFSRryfSHnuKo6/MxxCgDSVOXXsqJBP4fnedTvU57vBMg5p7L4oe/r0CR5KEmBMiOduK4rI6uoQh4CyJOH9He4MjlQ13V38eLFX7Rt+3MxL8dDAK4B4FXn6u766Lm5Kse1AH6OaP1EQAgBIeS9c8899+rrrrturXzwJhIJYRi5gC2VTDjnVSESoH7JRKJSUgHiZYXvzuSiqg2ZOS77kbe1teWJI5FIQKoPPwEwH1lFKSWqg5xzzlTVIf0YpmnmiUM1V9m2Tfxx+cKHvllLHo/4pUiCWeVCKg8Zoiud5ZZlNa1YseJrnPMjYlwOgVxJ9h9W+TLv8thtb6Aq4ywATyJCFU9CiPy5ZcSIEdfde++9rwXHSDLxeyYIoDCRALXPAenuhCJRTrmRXY1gpG9GNVNxzoVM+JPNnWzbZqWII5FIkGBklWmaFH5Yrgy59SvjqqYqGjRXyfayvr+E+g73PGkETFaSPGQPD5cQInuXWy0tLftv2LDhJgD9Y1wWEzlT9NNVvNS7DXapG6SLMRrAnwDsXWqQJBD/vdfc3PyDxx9//P8kUUhwzgWww7kuVYn8vDNVSaXHqOSYQVSTVCSqWcuqK0mnWNKgqjaAHWuUxKGaqhKJBGzbZtJUJX0cfqMnKoTIR1YBoLLUukocan0qwzA6EIdPGsQfwzzPI9InIgsfoqO5SoLLzHIlRNdhjFmJRML66KOPJqbT6csR0RLgYzOAzwF4Pf7V7gHQQyDVxr7IFWE8stQgRYUAAHRdf+Gaa6757zPPPHNbQ0MDpCkLyD3cEomEkKpEEkkxPwnQvcgk7nGLoRbEEkRXF02Mg6BvQ/69kskkGhoaSFtbW96vIYlEVRzqT2lWKqY4ZD6HShx+IiBVneiGYeTLj9i2Tfz2tB3MVf4xJXlwIO/rEIQQlzGmJgfaQgi6dOnSy1zXPTnmJVoG4EwAH1Xpku+W6CGQ6qMZwDPIVewsiiCJEELWHXrooTc88MADbwKAZVkkmUwKAHlCSSQSQhJKrckE6DpCiXvsUugMYomKahFQqZaxcnvQt+E4DlHMVjuRhlQbfodA5n9OpPObECIT/ZjfXTBPHErCH+Wc03Q6HQzblQUP8+YqGbGFnJlKkpWAXwgRO8xVAoDnE0cHk9WmTZuGrV+//nohxOCYl3Aecsqjpyhihaibm2sXgwbgTgAzUOIaqyTivxfNzc2/+MEPfnDPgQceaMsHhWmaCJIJ51wEfSWSSIDqmbgkupJMyllDFNQTuZSLIGkAO85LFjgspTYkcchWslJxyDwO3++RVxO+nyLvIPdDdok0V8lugH5J9nx0VQk/hxqau5OjXPF3OJqmOYwxS9M0b9myZWcbhjEV0SvpSvwSwA0ArLCBPQhHt7+B6hxTAPwaJZzrQRIhhIBSumDixIk3TJ8+fUVwvPSVJJNJUYhMgqoE6FoyqcbxqrmWOKhXgilFGjKSKp1OdyAMlUAkcahmKsuyiDRTqcQhfROSNGQhwzDiUAseKn4OqpqpShCHgJLbIUuSJBIJa/v27f1Wr179Vc75oTEvmwngKgC/qcbfoAc51OUNsovhMAC/B3BwsQGFSASAMWjQoP995JFHnkwkEkJ9UFqWBV3XRe/evYVUJ8XIRH5eCxOXRD0RikQtiaUYakk4YaQRNFH5mdpQiUNWxpXlRqTqkDkc0jHuum5eLUhi4JwTSRzSVKUQh5o93sFc5XkeUQof5v0bBZzkQvF1SJOV7asOO5FIWCtXrhzX1tZ2BYCmmJfvYwDnAXivoj9CD3ZCD4F0DnoDeBQleq0XIREkEom/T5ky5X++9KUvtaRSKWQyGep/LkzThK7rQhJKIpEQMkpL+ko8zxOqiQuoLzKp1nGjoiuIpRzIdaqOcCB3raRfA8gRhOM4+UiqoOIoZKaybZvKHA7HcfJqQyoOqSxkUp90jku/hcz1kGYtnzBkZNVOxAHfz4HCxAEoEVaqr0OqDsMwGlasWHGp53kTyriUfwFwEYAtYQN7EB/d4mbaRUAA/DeA/0WRUMNCJOJ/1j5w4MC77r///iebmpq4bdskmUzCsnaYcSVxcM5FFDIBaud8V1HuA7urwmG7kmBU0giG3AZJQ5qoCpGGX0+KqKShqg1JGCpxBP0bPnEQ13XzJUqk4vB9JCpx5EuPFCEOyJ8orjpkhFU+MZBS6qxevXrc9u3bpyEXnBIHAsD3AHwbfjRXD6qPHgLpfJwCYCaK5IsUUyJ+GZT5n/rUp745ffr0j1RziXzY6LouOOd5RVKKTKRZTCUToHguQVcTSjXXUA1Ug2jCVAaQM0+pJqqg0pB1qmSBwSBpeJ5HbNumyLWKZX7XPqL6N9SihVJp+E50IvM4ihBHmOIo5CAHFF8HIcQBwKWTnFLqJBIJa9u2bf3Xrl17Oec8ciM3BZsAXIpcSH0Paoi6uSF3M/QH8DCAyYU2FgjxVV92v379fvHd73734WHDhtmSSNQKsEE1wjnvQCbSZyLJRD12FEKppxyQeiKVMNi2TdQQXHnupVSGJApJKvJ32cbVL2meN1HJpkvygS5VBiEkTxq++iDSv6GUTM+bsGQ3QF+dkCg+DkQgDs658Euue/CJgzHmMsZsXddtQoi3YsWKz2Sz2S8iXhFEib8gRx4tZezbg5joNjffLoorANyNIk7BYiYtQggYY8uOOuqob9x2223/lt9EE4lEh/1t24amaR0IRP2pkgmwQ53IEhcAOhDM1q25sPkg6dQToUh0NbEE1UUh85RKGKlUCn5tKOI4DuGc02QymTf9SPOUX/ojTxqSMEqRhkz6k9FUfoQUdV03TwbSTCVfqmlL1q2SZq4oxKH06ZCQkVWeH56bL4BI/V7lra2t+6xbt+5qIcSIMi65iVw9q59jR5n3HtQYPQTS9TgIwCwAxxbaWIpECCGioaHh2SlTptx99tlnb5QEIk0esleEZVmw7Vx1as/zdlIlhdQJ0JFQpNMe6Fj4UU1yBGrz4K6mX6KWCY+l1AWwgzBUUlGjp4IqQ5qkZFSVdIarpGFZVt5kVYw0/Oq5UmHk1Yact5CZylcrVPo4/IgsxjmHShw+GRYKyZUQyDnJJXl4hBBH0zRXmqtM02xavXr1FNu2T0f8vA4A+ADAl/yfPehE9BBIfUAH8F0At6DIDSSJhFKa/13JGzH69ev3wC233PLowQcfbMnIHCBHJtInAuxQJSqhMMY40NHk5Xme6N27dwdC8ffP+01UUgmauuQ+qtO+mqiVs7sQwRQjieC2QmQh95HjJEHI8iLBEupBspBEokZQBZWGrB+lkoYMwZWk4auPfCKfEKIDcQTNVKracByHuK7bIXdDySKPQxyuJI6AueoCAI1l/LkEgPsA3IycAulBJ6OHQOoLnwLwKwAFJXyIGgGldO2wYcN+dNddd/3V/yZKEokEZE4AAGialvePyM8YY1wllMbGRm5ZFoIKxTRNqKQiH3xBXwrnvAPpqNvkQ1bdXmhcuYhKLIXGqWX0i42VZKD6LYAcUavb5TaVIKTzW83jkP4MSRSWZdFEIgE19LYQaahKw/M8SgghsmOfaqKSikPmbpimKQmEWpZF/HmZVDV+ocN8zoZKHHJ+KCYrlCYODsCjufayjiQOxpi9Zs2ao9va2i4RQuwT5e9VAKsB/BeAv5a5fw+qgB4CqT80IBd6OAO5kigdEOJgB6UUiUTi3eOOO+7O66+//j/ywZTNZvMPMglN00RjY2NejXDOhaZpQgiRj9pSTV5qzkkhUiH+oqQqkT9Vsgo66dVv7bVQKhJBwihEIEF/hYSaxAfsIAu5LZ1O5+tNqWpCmqBU/5T0XchtkiikypAmKkIIkeYpqRJU0vDXlDdRyf2kYlDVhozUchyH+mXYiao6fIUCVXX4BALp71ALHvqnXow4PMaY8H0cnqZpDiHETSQSNqXU2bp165D169d/uczoKiAXkvsLAN9AT7/yLkcPgdQvjkIuUuuYQhvD1DiEh18AAA/qSURBVIjvH3l+4sSJD06dOvXj4MOsmCqR76XzXRJK0Oyl63qeWOS+0kwmP5MPXJUYTNPciWAkpL+l4isXASpJqJVrJSRJSPKQJAHsSN6T7wFAvb4AkEgkOrSDlddd6ebXgTA8zyOUUqkIqOM41D9OXgnIMiH+uHzJECEECZKG/5lsMauaqaTDXVbEJWqRw0JqQyEOec1Uos83d2KMcd9Ula9f5fs57La2tv7r16//vOu6E1GenwMAFiIXePJmmfv3oMroIZD6hgbgeuT8IwVtxMFckQKKhDc1NT03ceLEh84999w16rdeANB1fac5VVJQCaUUqcht/px5paL6X1KpFGT2PJBz7jc3N3dwzhc6x1qQikogKjkEiUG+9/0AeaWhqgqVlFV1YRhGh9+9XG/vDmQhCSNYI0o+zKUqsG2bEELypOG/UIw0bNsmMsxXjaiSZKXWqCqgNoDC/g0CP4cDHWtW5YlDKg7fXOVkMpm+a9euPde27VMRr1eHCgvA9wH8AD29yusKPQTSPTAcwIMAJhXaWMqsRSmV791evXo9e8YZZzx8+umnr5PffoEd5hZgB6EIIWRUlQAAx3Hy7yWJNDY2iiDZ6Lougo56TdPyRKKSh2oKUolGzlfqgpRDKmquTHB/1Zfhum6HIAS5XSUJYIfqkOZB/4HbQV3IRD65j3RoS6e2HCPJQhK867r5DG6VNHyzFimmNPxtHUiDcw4/szzv+FYJBDmnOJBTBvnzQGEzlSCEcEqpkKRBCOGqqYoQ4pqm2Xv16tWf8yOrdv6WEh3zkPN1LK5gjh7UCD0E0n1AAExF7lvYfgUHFCEShURACHGam5ufOeOMMx456aSTNqllMOQ340JzB8lDJRa5vZBikWQiP5PEpBKMhPxGr+6jQi3dUgylwnTVyKjg56pZL2jmkyQh38sHrK7r8B/WHa6f/JYP5PIipMKQPgyFaCjNFTmUfhAZLSWVgcwSz/sfJFmo0VoyKdCfG9JMpaiNPGEoKkeqjrAwXKAwcUgfh0spdXVddyiljmEYzWvWrPmsZVlnAUgUmCsq1gP4JnI15HpKkdQpegik+6EBwG3IOdkLhg0VUiIAdiKSxsbGv4wZM2bWBRdcsER+Y1a/Ofv7dPgfkcTBGBOMMSGVCWNMmKZJGGMiGOmljlPJRP0ZJA35PkxpBEmoGFSVFZxXkoPneUSSAtCRIOQ+8oEst3meJ4kh/7t0eEulIRWGGtUks72leUySBeecyDpUvl8i70NRSSNgnsqbx2TIrUoc8KOmlBBcILrakGYqAUAqDs+PqnL9trLO1q1b92ppaTnLdd1TUJnisJFLBrwdQLqCeXrQCeghkO6L/ZBTI1NR5O8YwdEOQggSicQbI0aMmDVt2rTXKc31wFYdupqmQc0s1rSOwWGK01yoBKOqE5VE/DlEIaWhbi924lHMV4WIRXlYAkBeYQghqEocQYLwr2EHkpDrCBKE+l76QZBL4pNJgTspDNM0iRAiTyK+CU0qCyKEyJu1FOLIzxFQGgR+T3GVQIqoDQA71ajKt5ANmqmU/hyurusOIcTesGHDoVu3bj3H87xjUfnz5A/I5XT0tJntJughkO6P4wHcC2BMsQERFQk0TVu29957z7z44ov/2rdvX1cmr8F/IMmHKuecBElEglLawXci3zuOk/evqNtUlVLoZ1REIRWfEAsShfwdAFzXhaZp+XMFciSjkgSQI1L5Gec8b4oKkoXS77soYUh1IUlDOsGlwgCQJw0/Z4MUIw1lrR1qUnmeB+zsEAcU4vBJgwPgQghP0zQXfi6Hb6ZyNU3jq1atGtve3v45zvmBcf5ORbAAwNcAzKnCXD3oRPQQyK6B/2/vfGLjuOo4/n0zs2s78b8om01S0uKUpiFBiUVSoaSJEZQKpSA4RXDir7ghcYIDd24IwRGpEly49AACtaVFKlwgKTSqCpS2EpQ0LU1iJ6qbXdvx/pn3hsN7v/Gbt7vxxlnHjvP9SKOdnZ2dmbW189nf+73fexGAb8DWj3y0106r1ZDIEsfxtcnJyV/PzMw8f/LkyVmpRXA36bwXkdwku51LBCNCAVbyJLLdf2838QwCv5dZKAo5v/88TdNcRr5A5HUvAa7C5wAgslBKRcYYJfkLd7wOWYTCcOf0owwFII8yXC8uiYTyZqge0vCjro4uuK55Ks9vwDZRZXEcpxJ5iDRcfmNidnb208vLy2eyLNs9gH/PFQA/AvA0gHQAxyN3GQpka1EG8B3YHMlHeu3Ur0iUUmZoaOiv+/bt+83Zs2fPjY6Oau1mrnO/vmO/GadbU1c3SfjrvjC01kqe+/sOCl8YfsQi26Vrr0gBWBGCPHefFSIQP7qQaEPWfUmETVLGGBhjwu62IgJ4sih069VaSzSUR0UImqXCpjofTxoyiVM43EieGE+SJFVKZZcvXz5aq9We1Fp/Cmuv4fC5Btv8+nMAnUMSkHsGCmRrMgLb9fGHAHr+UuxHJLI9iqIPxsfHn52enn5uZmbmf3BTn0qxm+v9FCmllPzi9m+6vZq8vGvpqFb3jyH0Ok6arv4DVqIE/7q6PWZZJvUb8AUh+0g3X5GDHNuPKOTRVYBDXpMhRmCbpKR3VUEY0jzlD1Qo1xE0SeXRhRNKx/fZjzKcnI3ypo51RX/Gy22kcRy3a7Xarrm5uc80Go0nsyyrrPrH7Y8PAPwYtpKcCfItAAWytdkO4LsAfgCg501ARCHrq0Um5XL5QqVS+cPp06f/vH///ro0b7k6g0hrHflNXJJQBoBQLgAQx93ry8IoRN4T5jtc2/6qhDJyN/nCNcm6RBGATbZ7OQz/vSrLMqWUypukfFlIROH1kspv+kHXWj+XkcvAy20AKyPfAu5726v5EEVhdEQbLq9hoiiSAQ41gHaapsNXr149vrS0NKO1Po7B3R9uwE5b8DMA9QEdk2wCKJD7gzEA33NL9VY79opK/HVvSYeGhl6pVCovnTp16tyePXsW3U0tF0mappFLSEcAIvl1DxRv2P0WBopswl/bfpFgN0JxuZt6IeoAVmQkApB1XxhuPz8Rnj/vIov8ubzPy2sUmp/k0ftsBWm4CnHAfm/92ghJgoswAG9AQ6WUhu1VJbUbMu+41loPXb169dji4uIprfVj6DL+2h0wDxtt/BTAhwM8LtkkUCD3F8MAvg47PMqhW+0YRiXy2E0obj0tl8svV6vVP544ceJ8pVK56X6ZR0qpPCqRNn/XrBUZYyLAiqFbJBDHsd/dtiNvEeLv40cmfmQhjy6f0PO5RAKuq2z+5/BEIpLJeziFspBt3gIUm6CUd535MCLeZ/A/Z7cEuGzPPGEUmqiSJNFKKe0iDm2MKc3Ozh6r1+uPu+63d1Lw142LsNHGLwAsDfjYZBNBgdyfKABfgC1G/OyqO9+iiavbNqVUq1QqXRgfH//bgQMHXjl8+PBlkQhcFNJsNnOxuJt1VCqVCklo/2buihw7RCL42/yCQf+1QBb+jR7ejR1+pIEVSXT0bgqiloJIZKBCrHzHCs1Xcm2hMLwoo/ARgvVCgV8oDBGJ6z2llVK6Xq9X5+fnjywvLx/TWh/D2qaLXY3zAH4C4HcA+mtXJPc0FAg5DuD7AM6ij+aLUB7dtnVJwF8eHh4+X6lULkxPT/9jbGysqe0cFrlMoigqyCSOY7hIJRKpyHZgpVlJ1gNpdIim1Wp1CMj/5Q8UxCP5HMA1KYVRQtgkFSSx8+d+pCRRjc8qwshUkAQXWcA1UblFx3GciSyiKNLGmGR2dvbji4uLn2y3249la593YzUMgN/CiuP8Op2DbFIoECI8CDtU9rcArHqz8QUSPu8mFO+xXSqVXtu+ffuru3btenNqauo/ExMTLWNMPhigq6EoyCOKonzwQKVUBBQkUugR5dVPFG7qgJWGvEdeD2/+vkjcezoih2Bbt15QHbKQ8wd/t0IxH7zkt5MF4JLgviwk0nDSMMaYeH5+fn+9Xj/YbDaPaq2PYH2iDGEOdpyqpwH8dx3PQzYxFAgJiQGcgZXJF9FnUvV2hBJsT5MkeatcLv9rcnLyrX379r1RrVZvRFGUz98tMoEThUQu0g3WGyFXRBL5MkGxy2suHu+mXxCEv83f3qu+olcCP5RFWCTZK48R1GfItsLSaDRG5+fnH7158+bBVqt1yBhzEHc2BlU/GAAvws6a+SyA9jqfj2xyKBByKx4A8E0A3wbwsdt5462E0m2bvx5F0ftJkrw+MjJycXR09FKlUnl3z549H7qh0CUyyaMTkYZXfyECCcVS6OkUNmH5eQ0UvxvhMCAFenQjDhPeQNAk5V4TSeSiwIpITJIkZnFxcbxWqz24tLT0UKvVmtJaH8qyrOuIzOvEewB+CZsUf+8unpdscigQ0g8RgCcAfA3AlwFM3u4Bugmkn9e8fWpxHP+7VCq9Mzw8fGliYuLdarX6frlcbnhNXX61d+RLI2zqiuM43yZyCLvo+ue/VXW3u75ColuiDRFG+Ohey5umkiQxzWZzqF6vP7CwsPBgs9l8qN1uTxljHsmybMeqf6DBswDgOQC/gp13nElx0gEFQm6XIQCfB/BVAF8CMH6nB+xTIL1eqkVRdEUpdaVcLs/FcXxtZGTk+rZt267v2LFjNo7jti8TeLmPbsKQJi+ZV6Rbj6/gusIeUgVpeNFF1mq1klqttrvRaFSWl5d3pWlaTdO0aozZa4zZizWIecAsAXgewDMAXgCHGSGrQIGQO2EYwFMAvgIrk+3rdaJ+JCNkWSHVsKiUqimlbiil6kqpehRFC0mS1KMoWiiXywuuqK4BQCVJ0lB2SlaUy+Uld+4ss6MSo9VqbXN1KnGaptvs6bIhrXWp3W6PGmPGtNZjWuuxLMvGvWUHgNHB/UUGxjKsLJ6BjThubuzlkHsJCoQMihFYmTwFm4Rfr26j5M6ZhU2GvwDg9+C4VGSNUCBkvTgCK5IzAE5j8NXOpH9S2BqNF93ydxSLEwlZExQIuRuMAvgcrEyeAPDoxl7OfcFFAH+CFcZLAGobezlkK0KBkI1gF2xUcgrASdjZFBmhrJ0UwKsAXgZwDsBfYJupCFlXKBCyGRiBlcjjsGI5BluDQrozB+A1WFGcA3ABHLSQbAAUCNms7ARwFDaXcgTANIBPANi2kRd1l2kAeAN2zvDX3fJP2Bn9CNlwKBByLxEBeBhWJo8AmHLLw7Bzwa/n2E/rRQu2uvsigEtueRtWFG+DBXxkE0OBkK2CArAXwH6sSGU3bCRTcctOt9yNKGYZdgpXWa67xzkA77jlEoArKE4ORcg9AwVC7kdGsCKTnbCRzbDbDgATblsJxeK/JdiIIYOdphWwzUzLbpsvDBbkEUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCFkq/B/kHIyNJlOxaIAAAAASUVORK5CYII=
This package provides a toolbar of interactive 'power tools' that you can use while editing a tiddler to quickly insert TiddlyWiki tiddler links, images, macros, etc. or common formatting sequences directly into tiddler content, as well as perform other functions (such as find/replace, sort, split, convert, etc.) that can be used to modify the current tiddler's source content in a variety of ways.

<<tiddler QuickEditToolbar with: show>>
!!!!!Installation:
<<<
Individual ~QuickEdit buttons are defined in separate tiddlers (e.g., [[QuickEdit_replace]]) that have also been //transcluded// into a single toolbar definition named [[QuickEditToolbar]].  You can edit this definition to add, remove, or rearrange the toolbar buttons to best suit your needs, and then embed the [[QuickEditToolbar]] tiddler into your document's [[EditTemplate]], like this:
{{{
<div macro='tiddler QuickEditToolbar'></div>
}}}
Next, in order to support some of the formatting 'shortcuts' provided by the toolbar, add a reference to the shortcuts CSS class definitions in your [[StyleSheet]]:
{{{
[[StyleSheetShortcuts]]
}}}
By default, the QuickEdit toolbar is hidden until you enable it by using the ''toggleQuickEdit'' command, which you can add to the ~EditToolbar definition in [[ToolbarCommands]]:
{{{
|EditToolbar|... toggleQuickEdit ...|
}}}
You can also toggle the ~QuickEdit toolbar display via a single checkbox option that can be added to [[SideBarOptions]] (or any other desired location):
{{{
<<option chkShowQuickEdit>> show QuickEdit toolbar
}}}
Note: You can 'hard-code' the ''chkShowQuickEdit'' setting, so that the toolbar will be //initially// displayed, by creating a tiddler (e.g., ConfigTweaks), tagged with <<tag systemConfig>>, containing:
{{{
config.options.chkShowQuickEdit=true;
}}}
Alternatively, if you want the toolbar to //always// be displayed, regardless of the option setting, you can add a special keyword, ''show'', to the [[EditTemplate]] syntax, like this:
{{{
<div macro='tiddler QuickEditToolbar with: show'></div>
}}}
<<<
/***
|Name|QuickEditPlugin|
|Source|http://www.TiddlyTools.com/#QuickEditPlugin|
|Documentation|http://www.TiddlyTools.com/#QuickEditPlugin|
|Version|2.4.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Support functions for ~QuickEdit package: styles, utility functions, and 'toggleQuickEdit' command|
!!!!!Revisions
<<<
2011.02.14 2.4.4 fix OSX error: use picker.file.path
2009.06.11 2.4.3 added keyup() function to abbreviate listbox handling for CR and ESC
2009.05.07 2.4.2 added processed() function to abbreviate event handler code
2008.09.07 2.4.1 added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.17 2.4.0 copied code from StickyPopupPlugin to remove dependency
2008.05.12 2.3.0 added "toggleQuickEdit" command handler (replaces inline script command)
2008.01.11 2.2.0 converted from inline script
2007.03.29 1.0.0 initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.QuickEditPlugin= {major: 2, minor: 4, revision: 4, date: new Date(2011,2,14)};

// SET STYLESHEET
setStylesheet("\
.quickEdit a { border:2px outset ButtonFace; padding:0px 3px !important; \
	-moz-border-radius:.5em; -webkit-border-radius:.5em; \
	-moz-appearance:button !important; -webkit-appearance:push-button !important; \
	background-color:ButtonFace; color:ButtonText !important;  \
	line-height:200%; font-weight:normal; } \
.quickEdit a:hover { border: 2px inset ButtonFace; background-color:ButtonFace; }\
", "quickEditStyles");

// REMOVE COOKIE
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

// UTILITY FUNCTIONS
config.quickEdit = {
	processed: function(ev) { ev=ev||window.event;
		ev.cancelBubble=true;
		if(ev.stopPropagation) ev.stopPropagation();
		return false;
	},
	keyup: function(ev){ var k=(ev||window.event).keyCode;
		if (k==13) this.onclick();
		if (k==27) Popup.remove();
	},
	getField: function(where) {
		var here=story.findContainingTiddler(where); if (!here) return null;
		var e=story.getTiddlerField(here.getAttribute("tiddler"),"text");
		if (e&&e.getAttribute("edit")=="text") return e;
		return null;
	},
	setSelection: function(where,newtext) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,newtext);
		return false;
	},
	wrapSelection: function(where,before,after) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,before+config.quickEdit.getSelection(e)+after);
		return false;
	},
	getSelection: function(e) {
		var seltext="";
		if (e&&e.setSelectionRange)
			seltext=e.value.substr(e.selectionStart,e.selectionEnd-e.selectionStart);
		else if (document.selection) {
			var range = document.selection.createRange();
			if (range.parentElement()==e) seltext=range.text
		}
		return seltext;
	},
	promptForFilename: function(msg,path,file) {
		if(window.Components) { // moz
			try {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
				var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
				var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
				picker.init(window, msg, nsIFilePicker.modeOpen);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension='jpg';
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterImages);
				if (picker.show()!=nsIFilePicker.returnCancel)
					var result="file:///"+picker.file.path.replace(/\\/g,'/');
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XP only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|JPG files|*.jpg|GIF files|*.gif|PNG files|*.png|';
				s.FilterIndex=1; // default to JPG
				s.InitialDir=path;
				s.FileName=file;
				if (s.showOpen()) var result=s.FileName;
			}
			catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
		}
		return result;
	}
}
//}}}

//{{{
if (config.options.chkShowQuickEdit===undefined) config.options.chkShowQuickEdit=false;
config.commands.toggleQuickEdit = {
	hideReadOnly: true,
	getText: function() { return config.options.chkShowQuickEdit?'\u221Aquickedit':'quickedit'; },

	tooltip: 'show QuickEdit toolbar buttons',
	handler: function(event,src,title) {
		var opt='chkShowQuickEdit';
		config.options[opt]=!config.options[opt];
		config.macros.option.propagateOption(opt,"checked", config.options[opt],"input");
		if (config.options[opt]) saveOptionCookie(opt);	else removeCookie(opt);
		src.innerHTML=config.commands.toggleQuickEdit.getText();
		story.forEachTiddler(function(t,e){if (story.isDirty(t)) refreshElements(e);});
		return false;
	}
};
//}}}

// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
	// if click is in a sticky popup, ignore it so popup will remain visible
	var e = ev ? ev : window.event; var target = resolveTarget(e);
	var p=target; while (p) {
		if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
		else p=p.parentNode;
	}
	if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
		Popup.onDocumentClick(ev);
	return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
/%
|Name|QuickEditToolbar|
|Source|http://www.TiddlyTools.com/#QuickEditToolbar|
|Version|2.4.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.2|
|Type|transclusion|
|Requires|QuickEditPlugin|
|Optional|QuickEdit_*|
|Description|format/insert TiddlyWiki content using toolbar buttons|

Usage:
* install [[QuickEditPlugin]] (runtime support functions)

* add the toolbar to [[EditTemplate]]:
	<div macro='tiddler QuickEditToolbar with: show'></div>

* 'show' (optional) forces the toolbar to always be displayed or,
  omit keyword and use <<option chkShowQuickEdit>> setting

* selected QuickEdit buttons can also be added individually to the
  regular tiddler toolbar by adding references directly in [[EditTemplate]]:
	<span class='toolbar' macro='tiddler QuickEdit_...'></span>

* see [[QuickEditPackage]] for additional installation options

%/{{hidden fine center quickEdit{
<<tiddler {{ // show/hide toolbar
	var here=story.findContainingTiddler(place); if (here) var tid=here.getAttribute('tiddler');
	var show='$1'!='$'+'1'||config.options.chkShowQuickEdit||tid=='QuickEditToolbar'; 
	place.style.display=show?'block':'none';
'';}}>>/%

TOOLBAR DEFINITION - add, remove, or re-order items as desired:
= = = = = = = = = =
%/<<tiddler QuickEdit_format>>/%
%/<<tiddler QuickEdit_align>>/%
%/<<tiddler QuickEdit_color>>/%
%/<<tiddler QuickEdit_font>>/%
%/<<tiddler QuickEdit_custom>>/%
%/ &nbsp;/% (SPACER)
%/<<tiddler QuickEdit_replace>>/%
%/<<tiddler QuickEdit_split>>/%
%/<<tiddler QuickEdit_sort>>/%
%/<<tiddler QuickEdit_convert>>/%
%/ &nbsp;/% (SPACER)
%/<<tiddler QuickEdit_link>>/%
%/<<tiddler QuickEdit_insert>>/%
%/<<tiddler QuickEdit_macro>>/%
%/<<tiddler QuickEdit_image>>/%
%/}}}
/%
|Name|QuickEdit_align|
|Source|http://www.TiddlyTools.com/#QuickEdit_align|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text alignment|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="justér tekst"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('vælg tekstjustering...','');
	s.options[s.length]=new Option('venstre','left');
	s.options[s.length-1].title='{{left{...}}}';
	s.options[s.length]=new Option('centrer','center');
	s.options[s.length-1].title='{{center{...}}}';
	s.options[s.length]=new Option('højre','right');
	s.options[s.length-1].title='{{right{...}}}';
	s.options[s.length]=new Option('ret','justify');
	s.options[s.length-1].title='{{justify{...}}}';
	s.options[s.length]=new Option('flyd til venstre','floatleft');
	s.options[s.length-1].title='{{floatleft{...}}}';
	s.options[s.length]=new Option('flyd til højre','floatright');
	s.options[s.length-1].title='{{floatright{...}}}';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		config.quickEdit.wrapSelection(this.button,'{{'+this.value+'{','}}}');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>justér</a></html>
/%
|Name|QuickEdit_color|
|Source|http://www.TiddlyTools.com/#QuickEdit_color|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text/background color|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="tekst/baggrundsfarve - @@color:#RGB;background-color:#RGB;...@@"
onclick="var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
 	p.style.padding='2px';
	function hex(d) { return '0123456789ABCDEF'.substr(d,1); }
	var fg=createTiddlyElement(p,'select'); fg.button=this;
	fg.style.width='12em';
	fg.options[0]=new Option('tekstfarve...','');
	fg.options[1]=new Option('\xa0 eller skriv en værdi','_ask');
	fg.options[2]=new Option('\xa0 eller brug standardfarve','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(r)+hex(g)+hex(b);
		fg.options[fg.length]=new Option(label,'#'+label);
		fg.options[fg.length-1].style.color='#'+label;
	}
	fg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Skriv en CSS farveværdi');
		if (!val||!val.length) return false; }
		this.options[0].value=val; this.options[0].text=val.length?'text: '+val:'text color...';
		var bg=this.nextSibling;
		for (var i=3;i<bg.options.length;i++) bg.options[i].style.color=val;
		var preview=this.nextSibling.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.nextSibling.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var bg=createTiddlyElement(p,'select'); bg.button=this;
	bg.style.width='12em';
	bg.options[0]=new Option('baggrundsfarve...','');
	bg.options[1]=new Option('\xa0 eller skriv en værdi','_ask');
	bg.options[2]=new Option('\xa0 eller brug standardfarve','');
	for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
		var label=hex(15-r)+hex(15-g)+hex(15-b);
		bg.options[bg.length]=new Option(label,'#'+label);
		bg.options[bg.length-1].style.backgroundColor='#'+label;
	}
	bg.onchange=function(){ var val=this.value;
		if (val=='_ask') { val=prompt('Skriv en CSS farveværdi');
		if (!val||!val.length) return false; }
		this.options[0].value=val;
		this.options[0].text=val.length?'background: '+val:'baggrundsfarve...';
		var fg=this.previousSibling;
		for (var i=3;i<fg.options.length;i++) fg.options[i].style.backgroundColor=val;
		var preview=this.nextSibling.nextSibling;
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
		var fg=this.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.value; if (bg.length) bg='background-color:'+bg+';';
		if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
		removeChildren(preview); wikify(t,preview);
		this.selectedIndex=0; return false;
	};
	var b=createTiddlyElement(p,'input',null,null,null,{type:'button'}); b.button=this;
	b.value='ok'; b.style.width='4em';
	b.onclick=function() {
		var fg=this.previousSibling.previousSibling.value; if (fg.length) fg='color:'+fg+';';
		var bg=this.previousSibling.value; if (bg.length) bg='background-color:'+bg+';';
		var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
		if (fg.length||bg.length) config.quickEdit.setSelection(this.button,'@@'+fg+bg+t+'@@');
		Popup.remove(); return false;
	};
	var preview=createTiddlyElement(p,'div',null,'viewer'); var s=preview.style;
	s.border='1px solid'; s.margin='2px'; s.width='24em'; s.padding='3px'; s.MozBorderRadius='3px';
	s.overflow='hidden'; s.textAlign='center'; s.whiteSpace='normal';
	var t=config.quickEdit.getSelection(config.quickEdit.getField(this));
	wikify(t.length?t:'~AaBbCcDdEeFfGgHhIiJj 1234567890',preview);
	Popup.show();
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>farve</a></html>
/%
|Name|QuickEdit_convert|
|Source|http://www.TiddlyTools.com/#QuickEdit_convert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - convert between comma/tab-separated and TW table format|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="kovertér mellem komma/tab-separeret og TW tabelformat"
onclick="var e=config.quickEdit.getField(this);
	if (e) e.focus(); var txt=config.quickEdit.getSelection(e);
	if (txt.indexOf(',')+txt.indexOf('\t')+txt.indexOf('|')==-3) {
		alert('Vælg tekst der indeholder tabulatorer, kommaer, eller TiddlyWiki tabelsyntaks.');
		return false;
	}
	var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('vælg en konverter...','');
	if (txt.indexOf(',')!=-1) {
		s.options[s.length]=new Option('kommaer -> tabel','commasToTable');
		s.options[s.length]=new Option('kommaer -> tabulatorer','commasToTabs');
	}
	if (txt.indexOf('\t')!=-1) {
		s.options[s.length]=new Option('tabulatorer -> tabel','tabsToTable');
		s.options[s.length]=new Option('tabulatorer -> kommaer','tabsToCommas');
	}
	if (txt.indexOf('|')!=-1) {
		s.options[s.length]=new Option('tabel -> tabulatorer','tableToTabs');
		s.options[s.length]=new Option('tabel -> kommaer','tableToCommas');
	}
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
	        var e=config.quickEdit.getField(this.button); if (!e) return false;
		e.focus(); var txt=config.quickEdit.getSelection(e);
		switch(this.value) {
			case 'tabsToTable':
				txt=txt.replace(/\t/g,'|').replace(/^|$/g,'|');
				txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,'');
				break;
			case 'tableToTabs':
				txt=txt.replace(/\t/g,' ').replace(/\|/g,'\t');
				txt=txt.replace(/^\t/g,'').replace(/\t$/g,'');
				txt=txt.replace(/\n\t/g,'\n').replace(/\t\n/g,'\n');
				break;
			case 'commasToTable':
				txt=txt.replace(/,/g,'|').replace(/^|$/g,'|');
				txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,''); 
				break;
			case 'tableToCommas':
				txt=txt.replace(/,/g,' ').replace(/\|/g,',');
				txt=txt.replace(/^,/g,'').replace(/,$/g,''); 
				txt=txt.replace(/\n,/g,'\n').replace(/,\n/g,'\n'); 
				break;
			case 'tabsToCommas':
				txt=txt.replace(/\t/g,',');
				break;
			case 'commasToTabs':
				txt=txt.replace(/,/g,'\t');
				break;
		}
		replaceSelection(e,txt);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>konvertér</a></html>
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - custom defined formats|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

!help
Påmindelser:

Brugerdefinerede formater gemmes som en "HR-separeret liste" i [[QuickEdit_customList]], hvor den første linie af hvert listeemne er den 'etiket', der vises i rullelisten, efterfulgt af een eller flere linier af wiki indhold der skal sættes ind i tiddlerkilden.

Erstatningsmarkører  kan bruges til dynamisk at indsætte værdier i det formaterede resultat: $1 indsætter tiddler editorens aktuelt markerede tekst. $[[message|default value]] interactively prompts for a value to be inserted. $[[message|$1]] uses the selected text as the default value. $[[message|{{javascript}}]] calculates the default value using javascript code.
!end help

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="brugerdefinerede formater"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('vælg et brugerdefineret format...','');
	var items=store.getTiddlerText('QuickEdit_customList','').split('\n----\n');
	for (var i=0; i<items.length; i++) {
		if (!items[i].length) continue; var lines=items[i].split('\n');
		var label=lines.shift(); var val=lines.join('\n');
		s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
	}
	s.options[s.length]=new Option('[Redigér brugerdefinerede formater...]','_edit');
	s.options[s.length-1].title='tilføj/skift brugerdefinerede formater...';
	s.size=Math.min(s.length,15);
	s.onclick=function(){ if (!this.value.length) return;
		if (this.value=='_edit') {
			alert(store.getTiddlerText('QuickEdit_custom##help'));
			story.displayTiddler(story.findContainingTiddler(this.button),
				'QuickEdit_customList',DEFAULT_EDIT_TEMPLATE);
		} else {
		        var e=config.quickEdit.getField(this.button); if (!e) return false;
			e.focus(); var txt=config.quickEdit.getSelection(e);
			replaceSelection(e, this.value.replace(/\$\x31/g,txt)
				.replace(/\$\[\[[^\]]+\]\]/g, function(t){
					x=t.substr(3,t.length-5).split('|');
					var msg=x[0]; var def=x[1]||'';
					if (def.startsWith('{{')) {
						try{def=eval(def.substr(2,def.length-4))} catch(ex){showException(ex)}
					}
					return prompt(msg,def)||'';
				})
			);
		}
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>brugerdefineret</a></html>
timestamp
$[[enter a date|{{new Date().formatString('DDD, MMM DDth, YYYY hh12:0mm:0ssam')}}]]
----
scrollbox
@@display:block;height:10em;overflow:auto;$1@@@@display:block;text-align:right;^^rul ned for mere...^^@@
----
nested slider
+++[$1]<<tiddler $1>>===
----
big red
@@font-size:36pt;color:red;$1@@
----
wikilink
[[$1]]
----
ikon
{{span{$1<<setIcon $2.png "" notext>>}}}
----
popout
<html><A HREF="javascript:void(0)"onclick="window.open('$1','link to $1','height=800, width=1000,scrollbars=no')" accesskey="u">Popout</a></html> 
----
iframe
<html><div align="center"><iframe src="$1" frameborder="0" style="width:100%;height:40em"></iframe></div></html>
----
Hurtig fET tabel
<<forEachTiddler where 'tiddler.tags.contains("$1")'
sortBy 'tiddler.title'
write 
 '(index < 600)? "|!"+(index+1)+"|[["+tiddler.title+"]] |\n" : ""'
              begin '"|sortable|k\n" 
+"| !antal | !<<tag $1\>\> |h\n"' 
end 'count+" tiddlere tagget med $1\n"' none '"ingen tiddlere tagget med $1 \n"'>>
----
fET TagTilTabs
<<forEachTiddler
    where
       'tiddler.tags.contains("$1")'

    sortBy
       'tiddler.title.toUpperCase()'

    write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'

        begin '"<<tabs txtMyAutoTab "'

        end '">"+">"'

        none '"//Ingen tiddlere er tagget med \"$1\"//"'
>>
----
Tiddlermakro
<<tiddler $1>>
----
Billede
[img(100%+,auto)[$1]]
----
ShowPopup
<<tiddler ShowPopup with: $1[[Klik]][[Se i popup her]] button>>
----
Ryk ned og gør til overskrift

$1h
/%
|Name|QuickEdit_font|
|Source|http://www.TiddlyTools.com/#QuickEdit_font|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - select font family|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="vælg en fontfamilie CSS attribut - @@font-family:facename;...@@"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('vælg en fontfamilie...','');
	var fonts=store.getTiddlerText('QuickEdit_fontList','').split('\n');
	for (var i=0; i<fonts.length; i++) {
		if (!fonts[i].length) continue;
		s.options[s.length]=new Option(fonts[i],fonts[i]);
		s.options[s.length-1].style.fontFamily=fonts[i];
	}
	s.options[s.length]=new Option('[Redigér listen over fonte...]','_edit');
	s.options[s.length-1].title='skriv fontnavn, et pr linie...';
	s.size=Math.min(s.length,15);
	s.onclick=function(){
		if (this.value=='_edit')
			story.displayTiddler(story.findContainingTiddler(this.button),'QuickEdit_fontList',DEFAULT_EDIT_TEMPLATE);			
		else
			config.quickEdit.wrapSelection(this.button,'@@font-family:\x22'+this.value+'\x22;','@@');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>fonte</a></html>
Arial,helvetica,sans-serif
Arial Black,Gadget,sans-serif
Bookman Old Style,serif
Comic Sans MS,cursive
Courier,monospaced
Courier New,Courier,monospaced
Garamond,serif
Georgia,serif
Impact,Charcoal,sans-serif
Lucida Console,Monaco,monospaced
Lucida Sans Unicode,Lucida Grande,sans-serif
MS Sans Serif,Geneva,sans-serif
MS Serif,New York,sans-serif
Palatino Linotype,Book Antiqua,Palatino,serif
Symbol,sans-serif
Tahoma,Geneva,sans-serif
Times New Roman,Times,serif
Trebuchet MS,Helvetica,sans-serif
Verdana,Geneva,sans-serif
Webdings,sans-serif
Wingdings,Zapf Dingbats,sans-serif 
/%
|Name|QuickEdit_format|
|Source|http://www.TiddlyTools.com/#QuickEdit_format|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - basic text formats, headings, blockquotes, etc.|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="ren tekst (fjern AL formatering)" accesskey="P" 
onclick="var e=config.quickEdit.getField(this); if (e) e.focus(); var txt=config.quickEdit.getSelection(e);
	config.quickEdit.setSelection(e,wikifyPlainText(txt)); return false;"
>&nbsp;~&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="''fed''" accesskey="F"
onclick="config.quickEdit.wrapSelection(this,'\x27\x27','\x27\x27'); return false;"
>&nbsp;F&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="//kursiv//" accesskey="K" 
onclick="config.quickEdit.wrapSelection(this,'//','//'); return false;"
>&nbsp;K&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="__understreg__" accesskey="U" 
onclick="config.quickEdit.wrapSelection(this,'__','__'); return false;"
>&nbsp;U&nbsp;</a></html>/%

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="--gennemstreg--" accesskey="G" 
onclick="config.quickEdit.wrapSelection(this,'--','--'); return false;"
>&nbsp;G&nbsp;</a></html>/%

%/ &nbsp;/%  SPACER

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="formatér tekst"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('vælg tekst format...','');
	s.options[s.length]=new Option('CSS klasse indpakning','{{$1{,}}},Skriv et CSS klassenavn');
	s.options[s.length-1].title='CSS klasse indpakning - {{klassenavn klassenavn etc{...}}}';
	s.options[s.length]=new Option('inline CSS stilarter','@@$1,@@,Skriv CSS (attribut:værdi;attribut:værdi;...;)');
	s.options[s.length-1].title='inline CSS stilarter - @@attr:value;attr:value;...@@';
	s.options[s.length]=new Option('overskrift 1','\n!,\n');
	s.options[s.length-1].title='H1 heading - !';
	s.options[s.length]=new Option('overskrift 2','\n!!,\n');
	s.options[s.length-1].title='H2 heading - !!';
	s.options[s.length]=new Option('overskrift 3','\n!!!,\n');
	s.options[s.length-1].title='H3 heading - !!!';
	s.options[s.length]=new Option('overskrift 4','\n!!!!,\n');
	s.options[s.length-1].title='H4 heading - !!!!';
	s.options[s.length]=new Option('overskrift 5','\n!!!!!,\n');
	s.options[s.length-1].title='H5 heading - !!!!!';
	s.options[s.length]=new Option('blockquote','\n\<\<\<\n,\n\<\<\<\n');
	s.options[s.length-1].title='indskudt blokcitat - \<\<\<';
	s.options[s.length]=new Option('monospaced','{{{,}}}');
	s.options[s.length-1].title='inline monospaced tekst - {{{...}}}';
	s.options[s.length]=new Option('ren tekst','\n{{{\n,\n}}}\n');
	s.options[s.length-1].title='multi-linie monospaced tekst boks - {{{...}}}';
	s.options[s.length]=new Option('superscript','^^,^^');
	s.options[s.length-1].title='^^superscript^^';
	s.options[s.length]=new Option('subscript','~~,~~');
	s.options[s.length-1].title='~~subscript~~';
	s.options[s.length]=new Option('HTML','<html>,<\x2fhtml>');
	s.options[s.length-1].title='HTML syntaks - <html>...<\x2fhtml>';
	s.options[s.length]=new Option('kommentar','/%,%/');
	s.options[s.length-1].title='kommentar (skjult indhold) - /%...%/';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		var parts=this.value.split(',');
		var prefix=parts[0]; var suffix=parts[1]; var ask=parts[2];
		if (ask) {
			var val=prompt(ask); if (!val) { Popup.remove(); return false; }
			prefix=prefix.replace(/\$1/g,val); suffix=suffix.replace(/\$1/g,val);
		}
		config.quickEdit.wrapSelection(this.button,prefix,suffix);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>formatér</a></html>
/%
|Name|QuickEdit_image|
|Source|http://www.TiddlyTools.com/#QuickEdit_image|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - embed an image|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
	title="indsæt et billede (jpg/gif/png) - [img[værktøjstip|URL]] eller [img[værktøjstip|sti/til/fil.filtype]]"
	onclick="var fn=config.quickEdit.promptForFilename(
		'Skriv/vælg en billedfil',getLocalPath(document.location.href),'');
	if (!fn) return false;  /* cancelled by user */
	var h=document.location.href; var p=decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1));
	if (fn.startsWith(p)) fn=fn.substr(p.length); /* use RELATIVE path/filename.ext */
	var tip=prompt('Enter a tooltip for this image',''); if (!tip) tip=''; else tip+='|';
	return config.quickEdit.setSelection(this,'[img['+tip+fn+']]');"
>billede</a></html>
/%
|Name|QuickEdit_insert|
|Source|http://www.TiddlyTools.com/#QuickEdit_insert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - insert content from another tiddler or external file|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="indsæt indhold fra en anden tiddler eller ekstern fil"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';

	var s2=createTiddlyElement(p,'select'); s2.title='filtrer efter tag';
	s2.options[0]=new Option('filtrer efter tag...','');
	s2.options[s2.length]=new Option('[alle tiddlere]','');
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
	s2.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
		var list=this.nextSibling.nextSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a tiddler or file...';
		if (tag.length) prompt='vælg en tagget tiddler ['+tids.length+' matches]...';
		list.options[0]=new Option(prompt,'');
		if (!tag.length) list.options[list.length]=new Option('[gennemse...]','_file');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
		list.size=Math.min(list.length,10);
		list.selectedIndex=0; list.focus();
		this.style.width=list.offsetWidth+'px';
		if (!tag.length) this.selectedIndex=0;
	};
	createTiddlyElement(p,'br');

	var s=createTiddlyElement(p,'select'); s.button=this;
	s.title='select a tiddler or file';
	s.options[0]=new Option('vælg en tiddler eller fil...','');
	s.options[s.length]=new Option('[gennemse...]','_file');
	var tids=store.reverseLookup('tags','excludeLists');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	s.size=Math.min(s.length,10);
	s.onclick=function(){ if (!this.value.length) return false;
		if (this.value=='_file') {
			var fn=config.quickEdit.promptForFilename(
				'Enter/select a text file',getLocalPath(document.location.href),'');
			if (!fn) return false; /* cancelled by user */
			var txt=loadFile(getLocalPath(fn));
			if (!txt) { alert('Fejl: kan ikke læse indholdet fra \0027'+fn+'\0027'); return; }
		}
		else var txt=store.getTiddlerText(this.value);
		if (!txt) {
			displayMessage(this.value+' ikke fundet');
			this.selectedIndex=0; this.focus();
			return false;
		}
		config.quickEdit.setSelection(this.button,txt);
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s2.style.width=s.offsetWidth+'px';
	s.focus();
	return config.quickEdit.processed(event);"
>indsæt</a></html>
/%
|Name|QuickEdit_link|
|Source|http://www.TiddlyTools.com/#QuickEdit_link|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - link to tiddler or external file|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="add a link to a tiddler or external file - [[link text|TiddlerName]]"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';

	var s2=createTiddlyElement(p,'select'); s2.title='filter by tag';
	s2.options[0]=new Option('filter by tag...','');
	s2.options[s2.length]=new Option('[all tiddlers]','');
	var tags=store.getTags();
	for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
	s2.onchange=function(){
		var tag=this.value;
		var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
		var list=this.nextSibling.nextSibling;
		while (list.length) list.options[0]=null;
		var prompt='select a tiddler or file...';
		if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
		list.options[0]=new Option(prompt,'');
		if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
		for (var t=0; t<tids.length; t++) {
			list.options[list.length]=new Option(tids[t].title,tids[t].title);
			list.options[list.length-1].title=tids[t].getSubtitle();
		}
		list.size=Math.min(list.length,10);
		list.selectedIndex=0; list.focus();
		this.style.width=list.offsetWidth+'px';
		if (!tag.length) this.selectedIndex=0;
	};
	createTiddlyElement(p,'br');

	var s=createTiddlyElement(p,'select'); s.button=this;
	s.title='select a tiddler or file';
	s.options[0]=new Option('select a tiddler or file...','');
	s.options[s.length]=new Option('[browse for file...]','_file');
	var tids=store.reverseLookup('tags','excludeLists');
	for (var t=0; t<tids.length; t++) {
		s.options[s.length]=new Option(tids[t].title,tids[t].title);
		s.options[s.length-1].title=tids[t].getSubtitle();
	}
	s.size=Math.min(s.length,10);
	s.onclick=function(){ if (!this.value.length) return false;
		var title=this.value; var txt=title;
		if (title=='_file') {
			title=config.quickEdit.promptForFilename('Select a file',
				getLocalPath(document.location.href),'');
			if (!title) { this.selectedIndex=0; this.focus(); return false; }
			var txt=title.substr(title.lastIndexOf('/')+1);
		}
		var txt=prompt('Enter the text to display for this link',txt);
		if (!txt) { this.selectedIndex=0; this.focus(); return false; }
		config.quickEdit.setSelection(this.button,'[['+txt+'|'+title+']]');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s2.style.width=s.offsetWidth+'px';
	s.focus();
	return config.quickEdit.processed(event);"
>link</a></html>
/%
|Name|QuickEdit_macro|
|Source|http://www.TiddlyTools.com/#QuickEdit_macro|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - embed a macro with 'guide text'|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

Note:
Optional 'guideText' can be used to add suggested defaults/placeholders for specific macro parameters.
Add guideText to your own plugin-defined macros using:
	config.macros.macroName.guideText='guide text goes here';

%/<<tiddler {{
	/* define guide text for a few common TW core macros */
	config.macros.edit.guideText='fieldname #rows';
	config.macros.view.guideText='fieldname (link,wikified,date) format';
	config.macros.slider.guideText='cookie TiddlerName label tooltip';
	config.macros.option.guideText='(txtCookieName,chkCookieName)';
	config.macros.tiddler.guideText='TiddlerName with: params...';
	''; /* must return blank to suppress output */ }}>>/%

%/<html><hide linebreaks><a href='javascript:;' class='tiddlyLink' tabindex='-1' 
title='tilføj en makro - \<\<makroNavn ...\>\>'
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('select a macro...','');
	var macros=[]; for (var m in config.macros) if (config.macros[m].handler) macros.push(m); macros.sort();
	for (var i=0; i<macros.length; i++) { var m=macros[i];
		var help=config.macros[m].guideText; if (!help) help=''; else help=' '+help;
		s.options[s.length]=new Option(m,m+help);
		s.options[s.length-1].title='\<\<'+m+help+'\>\>';
	}
	s.size=Math.min(s.length,15);
	s.onclick=function(){ if (!this.value.length) return;
		config.quickEdit.setSelection(this.button,'\<\<'+this.value+'\>\>');
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>makro</a></html>
/%
|Name|QuickEdit_replace|
|Source|http://www.TiddlyTools.com/#QuickEdit_replace|
|Version|2.4.5|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - find/replace selected text with replacement text|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar
!!!Revisions
<<<
2010.12.26 2.4.5 fix use getField(this) to support hijacks by editSectionPlugin
<<<
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="find/erstat valgt tekst med anden tekst"
onclick="var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
	var e=config.quickEdit.getField(this);
	var s=config.quickEdit.getSelection(e); 
	var t=createTiddlyElement(p,'input'); t.onfocus=function(){this.select()};
	t.value=s.length?s:'skriv måltekst';
	var r=createTiddlyElement(p,'input'); r.onfocus=function(){this.select()};
	r.value='skriv tekst der skal erstattes';
	var b=createTiddlyElement(p,'button',null,null,'?');
	b.style.width='2em';
	b.title='FIND/FIND NÆSTE måltekst';
	b.root=this;
	b.onclick=function(ev) { /* FIND */
		var e=config.quickEdit.getField(this.root);
		var t=this.previousSibling.previousSibling;
		var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		e.focus();
		if (e.setSelectionRange) { /* MOZ */
			var newstart=e.value.indexOf(tv,e.selectionStart+1);
			if (newstart==-1) newstart=e.value.indexOf(tv); /* wrap around */
			if (newstart==-1) { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); return; }
			e.setSelectionRange(newstart,newstart+tv.length);
			var linecount=e.value.split('\n').length;
			var thisline=e.value.substr(0,e.selectionStart).split('\n').length;
			e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);
		} else if (document.selection) { /* IE */
			var range=document.selection.createRange();
			if(range.parentElement()==e) {
				range.collapse(false);
				var found=false; try{found=range.findText(v,e.value.length,4)}catch(e){}
				if (found) range.select();
				else { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); }
			}
		}
	};
	b=createTiddlyElement(p,'button',null,null,'=');
	b.style.width='2em';
	b.title='ERSTAT valgt tekst';
	b.root=this;
	b.onclick=function(ev) { /* REPLACE */
		var e=config.quickEdit.getField(this.root);
		var t=this.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling;
		var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			this.previousSibling.click(); /* no selection... do FIND first */
		if (   (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
		    || (document.selection && document.selection.createRange().text==''))
			{ t.focus(); return; } /* still no selection... goto target input */
		e.focus(); replaceSelection(e,rv);
	};
	b=createTiddlyElement(p,'button',null,null,'+');
	b.style.width='2em';
	b.title='ERSTAT valgt tekst OG FIND NÆSTE MÅLTEKST';
	b.onclick=function(ev) { /* REPLACE and FIND NEXT */
		this.previousSibling.click();
		this.previousSibling.previousSibling.click();
	};
	b=createTiddlyElement(p,'button',null,null,'!');
	b.style.width='2em';
	b.title='ERSTAT ALLE forekomster af målteksten';
	b.root=this;
	b.onclick=function(ev) { /* REPLACE ALL */
		var e=config.quickEdit.getField(this.root);
		var t=this.previousSibling.previousSibling.previousSibling.previousSibling.previousSibling;
		var r=this.previousSibling.previousSibling.previousSibling.previousSibling;
		var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
		if (!tv.length) { alert('Please enter the target text'); t.focus(); return; }
		var m='Dette vil erstatte alle forekomster af:\n\n'+tv+'\n\nwith:\n\n'+rv+'\n\nEr du sikker?';
		if (!confirm(m)) { r.focus(); r.select(); return; }
		e.value=e.value.replace(new RegExp(tv.escapeRegExp(),'gm'),rv);
		e.focus(); e.select(); Popup.remove();
	};
	Popup.show();
	if (!s.length) {t.focus();t.select()} else {r.focus();r.select()}
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>erstat</a></html>
/%
|Name|QuickEdit_sort|
|Source|http://www.TiddlyTools.com/#QuickEdit_sort|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - sort lines of text|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="sortér tekstlinier"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('vælg sorteringsorden...','');
	s.options[s.length]=new Option('stigende','A');
	s.options[s.length-1].title='ascending';
	s.options[s.length]=new Option('faldende','D');
	s.options[s.length-1].title='descending';
	s.size=s.length;
	s.onclick=function(){ if (!this.value.length) return;
		var e=config.quickEdit.getField(this.button); if (!e) return false;
		var lines=config.quickEdit.getSelection(e).split('\n').sort();
		if (this.value=='D') lines=lines.reverse();
		replaceSelection(e,lines.join('\n'));
		e.focus();
		Popup.remove(); return false;
	};
	s.onkeyup=config.quickEdit.keyup;
	Popup.show();
	s.focus();
	return config.quickEdit.processed(event);"
>sortér</a></html>
/%
|Name|QuickEdit_split|
|Source|http://www.TiddlyTools.com/#QuickEdit_split|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - move selection to new tiddler and insert link, embedded tiddler, or slider|

Usage: see  http://www.TiddlyTools.com/#QuickEditToolbar

Based on ideas originally developed by YannPerrin
(http://yann.perrin.googlepages.com/twkd.html#easySlicer)

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" 
title="flyt det markerede til en ny tiddler og indsæt et link, en indlejret tiddler, eller en slider"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
	p.style.whiteSpace='nowrap';
	var i=createTiddlyElement(p,'input');
	i.defaultValue='Skriv titelen på en ny tiddler';
	i.onfocus=function(){this.select()};
	var s=createTiddlyElement(p,'select'); s.button=this;
	s.options[0]=new Option('vælg type...','');
	s.options[0].title='vælg opdelingstype';
	s.options[1]=new Option('link','link');
	s.options[1].title='erstat med [[TiddlerNavn]]';
	s.options[2]=new Option('embed','embed');
	s.options[2].title='erstat med\<\<tiddler TiddlerName\>\>';
	s.options[3]=new Option('slider','slider');
	s.options[3].title='erstat med \<\<slider \u0022\u0022 [[TiddlerNavn]] [[etiket]] [[værktøjstip]]\>\>';
	s.onchange=function(){
		if (s.previousSibling.value==s.previousSibling.defaultValue)
			{ alert('A tiddler title is required'); s.selectedIndex=0; s.previousSibling.focus(); return false; }
		var tid=s.previousSibling.value;
		if (store.tiddlerExists(tid) && !confirm(config.messages.overwriteWarning.format([tid])))
			{ s.previousSibling.focus(); return false; }
		switch(s.value) {
			case 'link':
				var newtxt='[['+tid+']]';
				break;
			case 'embed':
				var newtxt='\<\<tiddler [['+tid+']]\>\>';
				break;
			case 'slider':
				var label=prompt('Skriv en slider-etiket',tid);
				if (!label) { Popup.remove(); return false; }
				var tip=prompt('Skriv et slider værktøjstip',label);
				if (!tip) { Popup.remove(); return false; }
				var newtxt='\<\<slider \u0022\u0022 [['+tid+']] [['+label+']] [['+tip+']]\>\>';
				break;
		}
		var txt=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
		store.saveTiddler(tid,tid,txt,config.options.txtUserName,new Date(),[],{});
		story.displayTiddler(story.findContainingTiddler(this.button),tid);
		config.quickEdit.setSelection(this.button,newtxt);
		Popup.remove(); return false;
	};
	Popup.show();
	event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>opdel</a></html>
/***
|''Name''|RandomColorPalettePlugin|
|''Description''|Adds a random color palette to TiddlyWiki|
|''Author''|Jon Robson|
|''Version''|1.2.11|
|''Status''|stable|
|''Source''|http://svn.tiddlywiki.org/Trunk/contributors/JonRobson/plugins/RandomColorPalettePlugin/RandomColorPalettePlugin.js|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
!Usage
{{{
<<RandomColorPalette>>
}}}
Sets and saves a random color palette on execution

{{{
<<RandomColorPaletteButton>>
}}}
Creates a button, which when clicked will change the color palette
More information at http://macros.tiddlyspace.com/#%5B%5BRandomColorPaletteButton%20macro%5D%5D
!Code
***/
//{{{
(function($){
	RGB.prototype.toRGBString = function() {
		return "rgb(%0,%1,%2)".format(parseInt(this.r * 255, 10),
			parseInt(this.g * 255, 10), parseInt(this.b * 255, 10))
	}
	function HSL_TO_RGB(h, s, l) { // h (hue) between 0 and 360, s (saturation) & l (lightness) between 0 and 1
		var c = l <= 0.5 ? 2 * l * s : ( 2 - (2 * l)) * s;
		var h1 = h / 60;
		var x = c * (1 - Math.abs((h1 % 2) - 1)); 
		var r, g, b;
		if(typeof(h) == 'undefined') {
			r = 0;
			g = 0;
			b = 0;
		} else if(0 <= h1 && h1 < 1) {
			r = c;
			g = x;
			b = 0;
		} else if(1 <= h1 && h1 < 2) {
			r = x;
			g = c;
			b = 0;
		} else if(2 <= h1 && h1 < 3) {
			r = 0;
			g = c;
			b = x;
		} else if(3 <= h1 && h1 < 4) {
			r = 0;
			g = x;
			b = c;
		} else if(4 <= h1 && h1 < 5) {
			r = x;
			g = 0;
			b = c;
		} else if(5 <= h1 && h1 < 6) {
			r = c;
			g = 0;
			b = x;
		}
		m = l - (0.5 * c);
		return new RGB(r + m, g + m, b + m);
	}

	var macro = config.macros.RandomColorPalette = {
		messagesOn: false, 
		changedPaletteText: "We have assigned you a random theme by adjusting the [[ColorPalette]] tiddler.\nDon't like it? Click <<RandomColorPalette>> for another one.", 
		handler: function(place, macroName, params, wikifier, paramString, tiddler) {
			paramString = paramString || "";
			var options = paramString.parseParams("name", null, true, false, true)[0];
			macro.generatePalette(options, true);
		},
		generateRandomNumber: function(min, max, info) {
			var num = (Math.random() * 1);
			info = !info ? { attempts:0 } : info;
			info.attempts += 1;
			var good = true;
			if(min == max) {
				return max;
			}
			if(min && num < min) {
				good = false;
			} else if(max && num > max) {
				good = false;
			}
			if(!good) {
				if(info.attempts < 5) {
					return macro.generateRandomNumber(min, max, info);
				} else {
					if(max) {
						return max;
					} else if(min) {
						return min;
					} else {
						return 1;
					}
				}
			}
			return num;
		},
		getExistingPalette: function(asJSON) {
			var title = "ColorPalette";
			var tiddlerText;
			if(store.tiddlerExists(title)) {
				tiddlerText = store.getTiddlerText(title);
			} else if(store.isShadowTiddler(title)){
				tiddlerText = config.shadowTiddlers[title];
			}
			if(asJSON) {
				var json = {};
				if(tiddlerText) {
					var lines = tiddlerText.split("\n");
					for(var i = 0; i < lines.length; i++) {
						var definition = lines[i].split(":");
						if(definition.length == 2) {
							var name = definition[0].trim();
							var value = definition[1].trim();
							json[name] = value;
						}
					}
				}
				return json;
			} else {
				return tiddlerText;
			}
		},
		generatePalette: function(options, save) {
			var outputRGB = options.rgb && options.rgb[0];
			var palette = macro.getExistingPalette(true);
			var hue = options.hue ? parseInt(options.hue[0]) : Math.floor(Math.random() * 359);
			var saturation = options.saturation ? parseFloat(options.saturation[0]) : macro.generateRandomNumber(0.3, 0.7);
			var dark = options.darkest ? parseFloat(options.darkest[0]) : macro.generateRandomNumber(0, 0.10);
			var pale = options.lightness ? parseFloat(options.lightness[0]) : macro.generateRandomNumber(0.90, 1);
			var delta = ( ( pale - dark ) / 3 );
			var lightness_values = {Dark:dark, Mid: dark + delta, Light: dark + (delta * 2), Pale:pale};

			var opposite_hue = (hue + 180) % 360;
			var seed = options.huevariance ? options.huevariance[0] : Math.floor((85 * Math.random()) + 5); // we want it to be at least 5 degrees
			var huetwo = (opposite_hue + seed) % 360;
			var huethree = (opposite_hue - seed) % 360;
			if(huetwo < 0) {
				huetwo = 360 + huetwo;
			}
			if(huethree < 0) {
				huethree = 360 + huethree;
			}
			for(var j in lightness_values) {
				if(true) {
					palette["Primary" + j] = HSL_TO_RGB(hue, saturation, lightness_values[j]);
					palette["Secondary" + j] = HSL_TO_RGB(huetwo, saturation, lightness_values[j]);
					palette["Tertiary" + j] = HSL_TO_RGB(huethree, saturation, lightness_values[j]);
				}
			}
			palette.Background = HSL_TO_RGB(hue, saturation, 0.92);
			palette.Foreground = HSL_TO_RGB(hue, saturation, 0.08);
			palette.ColorPaletteParameters = ["HSL([", hue, "|", seed, "], [", saturation, "],",
				"[", dark, "|", pale, "])"].join("");
			// construct new ColorPalette
			var text = ["/*{{{*/\n"];
			var colorcode;
			for(var id in palette) {
				if(true) {
					var color = palette[id];
					colorcode = outputRGB ? color.toRGBString() : color.toString();
					text.push("%0: %1\n".format(id, colorcode));
				}
			}
			text.push("/*}}}*/");
			text = text.join("");
			if(save) {
				macro.saveColorPalette(text);
			}
			return text;
		},
		saveColorPalette: function(text) {
			var tid = store.getTiddler("ColorPalette");
			if(!tid) {
				tid = new Tiddler("ColorPalette");
				tid.fields = merge({}, config.defaultCustomFields);
			} // TODO: detect that the ColorPalette in the space comes from outside recipe
			tid.fields["server.page.revision"] = "false"; // edit conflicts dont matter

			// save the color palette in tid
			tid = store.saveTiddler(tid.title, tid.title, text, tid.modifier, tid.modified,
				tid.tags, tid.fields, false, tid.created, tid.creator);
			// an interval is used to cope with users clicking on the palette button quickly.
			if(macro._nextSave) {
				window.clearTimeout(macro._nextSave);
			}
			macro._nextSave = window.setTimeout(function() {
					autoSaveChanges(null, [tid]);
				}, 2000);
			// temporary workaround for IE.
			$.twStylesheet.remove({ id: "StyleSheetColors" });
			$.twStylesheet.remove({ id: "StyleSheet" });
			refreshAll();
			macro.reportChange();
			return tid;
		},
		reportChange: function() {
			if(macro.messagesOn) { // only display message once..
				var msgPlace = getMessageDiv();
				if(!$(".changedPalette", msgPlace)[0]) {
					var tempPlace = document.createElement("div");
					wikify("{{changedPalette{" + macro.changedPaletteText + "}}}", tempPlace);
					msgPlace.appendChild(tempPlace);
				}
			}
		}
	};
	config.macros.RandomColorPaletteButton = {
			text: "New ColorPalette",
			tooltip: "Generate a random colour scheme for your TiddlyWiki",
			handler: function(place, macroName, params, wikifier, paramString, tiddler) {
				var btnHandler = function(ev) {
					macro.handler(place, macroName, params, wikifier, paramString, tiddler);
					return false;
				};
				createTiddlyButton(place, this.text, this.tooltip, btnHandler);
			}
	};
})(jQuery);
//}}}
/%
!info
|Name|RefreshPageDisplay|
|Source|http://www.TiddlyTools.com/#RefreshPageDisplay|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|create a link to redraw all page elements without restarting|
Usage
<<<
{{{
<<tiddler RefreshPageDisplay>>
<<tiddler RefreshPageDisplay with: label>>
}}}
<<<
Example
<<<
{{{<<tiddler RefreshPageDisplay with: "click me">>}}}
<<tiddler RefreshPageDisplay##show with: "click me">>
<<<
!end
!show
<html><nowiki><a href="javascript:;" title="Redisplay current page content WITHOUT RESTARTING!"
onmouseover="
	this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
	+encodeURIComponent(encodeURIComponent(this.onclick))
	+')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
	story.forEachTiddler(function(t,e){story.refreshTiddler(t,null,true)});
	refreshDisplay();
 	return false;"
>$1</a></html>
!end
%/<<tiddler {{var src='RefreshPageDisplay'; src+(tiddler&&tiddler.title==src?'##info':'##show')}}
	with: {{'$1'=='$'+'1'?'refresh page display':'$1'}}>>
/%
!info
|Name|RefreshTiddler|
|Source|http://www.TiddlyTools.com/#RefreshTiddler|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|create a link to force an immediate refresh of the current tiddler|
Usage
<<<
{{{
<<tiddler RefreshTiddler>>
<<tiddler RefreshTiddler with: label tip>>
}}}
<<<
Example
<<<
{{{<<tiddler RefreshTiddler with: "click me">>}}}
<<tiddler RefreshTiddler##show with: "click me">>
content displayed at <<today 0hh:0mm:0ss>>
<<<
!end
!show
<html><nowiki><a href="javascript:;" title="$2"
onclick="
	var here=story.findContainingTiddler(this);
	if (here) story.refreshTiddler(here.getAttribute('tiddler'),null,true);
	return false;
">$1</a></html>
!end
%/<<tiddler {{var src='RefreshTiddler'; src+(tiddler&&tiddler.title==src?'##info':'##show')}}
	with:	{{'$1'!='$'+'1'?'$1':'refresh'}}
		{{'$2'!='$'+'2'?'$2':'redisplay current tiddler content'}}
>>
/*{{{*/
Background: #f4e0e4
Foreground: #1e0a0e
PrimaryPale: #f1d9dd
PrimaryLight: #d48695
PrimaryMid: #ae3d52
PrimaryDark: #0a0304
SecondaryPale: #d9edf1
SecondaryLight: #86c6d4
SecondaryMid: #3d9aae
SecondaryDark: #03080a
TertiaryPale: #d9f1e4
TertiaryLight: #86d4a9
TertiaryMid: #3dae70
TertiaryDark: #030a06
Error: #faa
SelectedPale: #dafaff
SelectedLight: #459BF9
SelectedDark: #07f
TiddlySlidyLight: #50a0fc
TiddlySlidyMid: #2d00ff
TiddlySlidyDark: #0069dd
ColorPaletteParameters: HSL([349|22], [0.47887320700101554],[0.027034801431000233|0.8998974852729589])
/*}}}*/
/***
|ModName|SearchOptionsPlugin_da|
|BasedOn|SearchOptionsPlugin|
|Source|http://klasser.tiddlyspace.com/#SearchOptionsPlugin_da|
|OrigSource|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#SearchOptionsPluginInfo|
|Version|3.0.7|
|Author|Eric Shulman|
|Translator|Måns Mårtensson|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|extend core search function with additional user-configurable options|
Adds extra options to core search function including selecting which data items to search, enabling/disabling incremental key-by-key searches, and generating a ''list of matching tiddlers'' instead of immediately displaying all matches.  This plugin also adds syntax for rendering 'search links' within tiddler content to embed one-click searches using pre-defined 'hard-coded' search terms.
!!!!!Documentation
>see [[SearchOptionsPluginInfo]]
!!!!!Configuration
<<<
Search in:
<<option chkSearchTitles>> titles <<option chkSearchText>> text <<option chkSearchTags>> tags <<option chkSearchFields>> fields <<option chkSearchShadows>> shadows
<<option chkSearchHighlight>> Highlight matching text in displayed tiddlers
<<option chkSearchList>> Show list of matches
<<option chkSearchListTiddler>> Write list to [[SearchResults]] tiddler
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchByDate>> Sort matching tiddlers by modification date (most recent first)
<<option chkSearchResultsOptions>> Include {{{options...}}} slider in "search again" form
<<option chkIncrementalSearch>> Incremental key-by-key search: {{twochar{<<option txtIncrementalSearchMin>>}}} or more characters,  {{threechar{<<option txtIncrementalSearchDelay>>}}} msec delay
<<option chkSearchOpenTiddlers>> Search only in tiddlers that are currently displayed
<<option chkSearchExcludeTags>> Exclude tiddlers tagged with: <<option txtSearchExcludeTags>>
<<<
!!!!!Revisions
<<<
2010.05.03 3.0.8 added chkSearchResultsOptions to allow/omit the "options..." slider from the "search again" form
|please see [[SearchOptionsPluginInfo]] for additional revision details|
2005.10.18 1.0.0 Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.SearchOptionsPlugin= {major: 3, minor: 0, revision: 8, date: new Date(2010,5,3)};

var defaults={
	chkSearchTitles:	true,
	chkSearchText:		true,
	chkSearchTags:		true,
	chkSearchFields:	true,
	chkSearchTitlesFirst:	true,
	chkSearchList:		true,
	chkSearchHighlight:	true,
	chkSearchListTiddler:	false,
	chkSearchByDate:	false,
	chkIncrementalSearch:	true,
	chkSearchShadows:	true,
	chkSearchOpenTiddlers:	false,
	chkSearchResultsOptions:true,
	chkSearchExcludeTags:	true,
	txtSearchExcludeTags:	'excludeSearch',
	txtIncrementalSearchDelay:	500,
	txtIncrementalSearchMin:	3
}; for (var id in defaults) if (config.options[id]===undefined)
	config.options[id]=defaults[id];

if (config.macros.search.reportTitle==undefined)
	config.macros.search.reportTitle="SearchResults"; // note: not a cookie!
config.macros.search.label+="\xa0"; // a little bit of space just because it looks better
//}}}
// // searchLink: {{{[search[text to find]] OR [search[text to display|text to find]]}}}
//{{{
config.formatters.push( {
	name: "searchLink",
	match: "\\[search\\[",
	lookaheadRegExp: /\[search\[(.*?)(?:\|(.*?))?\]\]/mg,
	prompt: "søg efter: '%0'",
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var label=lookaheadMatch[1];
			var text=lookaheadMatch[2]||label;
			var prompt=this.prompt.format([text]);
			var btn=createTiddlyButton(w.output,label,prompt,
				function(){story.search(this.getAttribute("searchText"))},"searchLink");
			btn.setAttribute("searchText",text);
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
});
//}}}
// // incremental search uses option settings instead of hard-coded delay and minimum input values
//{{{
var fn=config.macros.search.onKeyPress;
fn=fn.toString().replace(/500/g, "config.options.txtIncrementalSearchDelay||500");
fn=fn.toString().replace(/> 2/g, ">=(config.options.txtIncrementalSearchMin||3)");
eval("config.macros.search.onKeyPress="+fn);
//}}}
// // REPLACE story.search() for option to "show search results in a list"
//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
	var co=config.options; // abbrev
	var re=new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
	if (config.options.chkSearchHighlight) highlightHack=re;
	var matches = store.search(re,co.chkSearchByDate?"modified":"title","");
	if (co.chkSearchByDate) matches=matches.reverse(); // most recent first
	var q = useRegExp ? "/" : "'";
	clearMessage();
	if (!matches.length) {
		if (co.chkSearchListTiddler) discardSearchResults();
		displayMessage(config.macros.search.failureMsg.format([q+text+q]));
	} else {
		if (co.chkSearchList||co.chkSearchListTiddler) 
			reportSearchResults(text,matches);
		else {
			var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);
			this.closeAllTiddlers(); story.displayTiddlers(null,titles);
			displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));
		}
	}
	highlightHack = null;
}
//}}}
// // REPLACE store.search() for enhanced searching/sorting options
//{{{
TiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag,match)
{
	var co=config.options; // abbrev
	var tids = this.reverseLookup("tags",excludeTag,!!match,sortField);
	var opened=[]; story.forEachTiddler(function(tid,elem){opened.push(tid);});

	// eliminate tiddlers tagged with excluded tags
	if (co.chkSearchExcludeTags&&co.txtSearchExcludeTags.length) {
		var ex=co.txtSearchExcludeTags.readBracketedList();
		var temp=[]; for(var t=tids.length-1; t>=0; t--)
			if (!tids[t].tags.containsAny(ex)) temp.push(tids[t]);
		tids=temp;
	}

	// scan for matching titles first...
	var results = [];
	if (co.chkSearchTitles) {
		for(var t=0; t<tids.length; t++) {
			if (co.chkSearchOpenTiddlers && !opened.contains(tids[t].title)) continue; 
			if(tids[t].title.search(searchRegExp)!=-1) results.push(tids[t]);
		}
		if (co.chkSearchShadows)
			for (var t in config.shadowTiddlers) {
				if (co.chkSearchOpenTiddlers && !opened.contains(t)) continue; 
				if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))
					results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));
			}
	}
	// then scan for matching text, tags, or field data
	for(var t=0; t<tids.length; t++) {
		if (co.chkSearchOpenTiddlers && !opened.contains(tids[t].title)) continue; 
		if (co.chkSearchText && tids[t].text.search(searchRegExp)!=-1)
			results.pushUnique(tids[t]);
		if (co.chkSearchTags && tids[t].tags.join(" ").search(searchRegExp)!=-1)
			results.pushUnique(tids[t]);
		if (co.chkSearchFields && store.forEachField!=undefined)
			store.forEachField(tids[t],
				function(tid,field,val) {
					if (val.search(searchRegExp)!=-1) results.pushUnique(tids[t]);
				},
				true); // extended fields only
	}
	// then check for matching text in shadows
	if (co.chkSearchShadows)
		for (var t in config.shadowTiddlers) {
			if (co.chkSearchOpenTiddlers && !opened.contains(t)) continue; 
			if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))
				results.pushUnique((new Tiddler()).assign(t,config.shadowTiddlers[t]));
		}

	// if not 'titles first', or sorting by modification date,
	// re-sort results to so titles, text, tag and field matches are mixed together
	if(!sortField) sortField = "title";
	var bySortField=function(a,b){
		if(a[sortField]==b[sortField])return(0);else return(a[sortField]<b[sortField])?-1:+1;
	}
	if (!co.chkSearchTitlesFirst || co.chkSearchByDate) results.sort(bySortField);

	return results;
}
//}}}
// // HIJACK core {{{<<search>>}}} macro to add "report" and "simple inline" output
//{{{
config.macros.search.SOP_handler=config.macros.search.handler;
config.macros.search.handler = function(place,macroName,params)
{
	// if "report", use SearchOptionsPlugin report generator for inline output
	if (params[1]&&params[1].substr(0,6)=="report") {
		var keyword=params[0];
		var options=params[1].split("=")[1]; // split "report=option+option+..."
		var heading=params[2]?params[2].unescapeLineBreaks():"";
		var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
		if (matches.length) wikify(heading+window.formatSearchResults(keyword,matches,options),place);
	} else if (params[1]) {
		var keyword=params[0];
		var heading=params[1]?params[1].unescapeLineBreaks():"";
		var seperator=params[2]?params[2].unescapeLineBreaks():", ";
		var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
		if (matches.length) {
			var out=[];
			for (var m=0; m<matches.length; m++) out.push("[["+matches[m].title+"]]");
			wikify(heading+out.join(seperator),place);
		}
	} else
		config.macros.search.SOP_handler.apply(this,arguments);
};
//}}}
// // SearchResults panel handling
//{{{
setStylesheet(".searchResults { padding:1em 1em 0 1em; }","searchResults"); // matches std tiddler padding

config.macros.search.createPanel=function(text,matches,body) {

	function getByClass(e,c) { var d=e.getElementsByTagName("div");
		for (var i=0;i<d.length;i++) if (hasClass(d[i],c)) return d[i]; }
	var panel=createTiddlyElement(null,"div","searchPanel","searchPanel");
	this.renderPanel(panel,text,matches,body);
	var oldpanel=document.getElementById("searchPanel");
	if (!oldpanel) { // insert new panel just above tiddlers
		var da=document.getElementById("displayArea");
		da.insertBefore(panel,da.firstChild);
	} else { // if panel exists
		var oldwrap=getByClass(oldpanel,"searchResults");
		var newwrap=getByClass(panel,"searchResults");
		// if no prior content, just insert new content
		if (!oldwrap) oldpanel.insertBefore(newwrap,null);
		else {	// swap search results content but leave containing panel intact
			oldwrap.style.display='block'; // unfold wrapper if needed
			var i=oldwrap.getElementsByTagName("input")[0]; // get input field
			if (i) { var pos=this.getCursorPos(i); i.onblur=null; } // get cursor pos, ignore blur
			oldpanel.replaceChild(newwrap,oldwrap);
			panel=oldpanel; // use existing panel
		} 
	}
	this.showPanel(true,pos);
	return panel;
}

config.macros.search.renderPanel=function(panel,text,matches,body) {

	var wrap=createTiddlyElement(panel,"div",null,"searchResults");
	wrap.onmouseover = function(e){ addClass(this,"selected"); }
	wrap.onmouseout = function(e){ removeClass(this,"selected"); }
	// create toolbar: "åben alle", "fold/foldud", "luk"
	var tb=createTiddlyElement(wrap,"div",null,"toolbar");
	var b=createTiddlyButton(tb, "åben alle", "åben alle matchende tiddlere", function() {
		story.displayTiddlers(null,this.getAttribute("list").readBracketedList()); return false; },"button");
	var list=""; for(var t=0;t<matches.length;t++) list+='[['+matches[t].title+']] ';
	b.setAttribute("list",list);
	var b=createTiddlyButton(tb, "fold", "visning af søgeresultater til/fra", function() {
		config.macros.search.foldPanel(this); return false; },"button");
	var b=createTiddlyButton(tb, "luk", "fortryd søgeresultater",	function() {
		config.macros.search.showPanel(false); return false; },"button");
	createTiddlyText(createTiddlyElement(wrap,"div",null,"title"),"Søg efter: "+text); // title
	wikify(body,createTiddlyElement(wrap,"div",null,"viewer")); // report
	return panel;
}

config.macros.search.showPanel=function(show,pos) {
	var panel=document.getElementById("searchPanel");
	var i=panel.getElementsByTagName("input")[0];
	i.onfocus=show?function(){config.macros.search.stayFocused(true);}:null;
	i.onblur=show?function(){config.macros.search.stayFocused(false);}:null;
	if (show && panel.style.display=="block") { // if shown, grab focus, restore cursor
		if (i&&this.stayFocused()) { i.focus(); this.setCursorPos(i,pos); }
		return;
	}
	if(!config.options.chkAnimate) {
		panel.style.display=show?"block":"none";
		if (!show) { removeChildren(panel); config.macros.search.stayFocused(false); }
	} else {
		var s=new Slider(panel,show,false,show?"none":"children");
		s.callback=function(e,p){e.style.overflow="visible";}
		anim.startAnimating(s);
	}
	return panel;
}

config.macros.search.foldPanel=function(button) {
	var d=document.getElementById("searchPanel").getElementsByTagName("div");
	for (var i=0;i<d.length;i++) if (hasClass(d[i],"viewer")) var v=d[i]; if (!v) return;
	var show=v.style.display=="none";
	if(!config.options.chkAnimate)
		v.style.display=show?"block":"none";
	else {
		var s=new Slider(v,show,false,"none");
		s.callback=function(e,p){e.style.overflow="visible";}
		anim.startAnimating(s);
	}
	button.innerHTML=show?"fold":"foldud";
	return false;
}

config.macros.search.stayFocused=function(keep) { // TRUE/FALSE=set value, no args=get value
	if (keep===undefined) return this.keepReportInFocus;
	this.keepReportInFocus=keep;
	return keep
}	

config.macros.search.getCursorPos=function(i) {
	var s=0; var e=0; if (!i) return { start:s, end:e };
	try {
		if (i.setSelectionRange) // FF
			{ s=i.selectionStart; e=i.selectionEnd; }
		if (document.selection && document.selection.createRange) { // IE
			var r=document.selection.createRange().duplicate();
			var len=r.text.length; s=0-r.moveStart('character',-100000); e=s+len;
		}
	}catch(e){};
	return { start:s, end:e };
}
config.macros.search.setCursorPos=function(i,pos) {
	if (!i||!pos) return; var s=pos.start; var e=pos.end;
	if (i.setSelectionRange) //FF
		i.setSelectionRange(s,e);
	if (i.createTextRange) // IE
		{ var r=i.createTextRange(); r.collapse(true); r.moveStart("character",s); r.select(); }
}
//}}}
// // SearchResults report generation
// note: these functions are defined globally, so they can be more easily redefined to customize report formats//
//{{{
if (!window.reportSearchResults) window.reportSearchResults=function(text,matches)
{
	var cms=config.macros.search; // abbrev
	var body=window.formatSearchResults(text,matches);
	if (!config.options.chkSearchListTiddler) // show #searchResults panel
		window.scrollTo(0,ensureVisible(cms.createPanel(text,matches,body)));
	else { // write [[SearchResults]] tiddler
		var title=cms.reportTitle;
		var who=config.options.txtUserName;
		var when=new Date();
		var tags="excludeLists excludeSearch temporary";
		var tid=store.getTiddler(title); if (!tid) tid=new Tiddler();
		tid.set(title,body,who,when,tags);
		store.addTiddler(tid);
		story.closeTiddler(title);
		story.displayTiddler(null,title);
	}
}

if (!window.formatSearchResults) window.formatSearchResults=function(text,matches,opt)
{
	var body='';
	var title=config.macros.search.reportTitle
	var q = config.options.chkRegExpSearch ? "/" : "'";
	if (!opt) var opt="all";
	var parts=opt.split("+");
	for (var i=0; i<parts.length; i++) { var p=parts[i].toLowerCase();
		if (p=="again"||p=="all")   body+=window.formatSearchResults_again(text,matches);
		if (p=="summary"||p=="all") body+=window.formatSearchResults_summary(text,matches);
		if (p=="list"||p=="all")    body+=window.formatSearchResults_list(text,matches);
		if (p=="buttons"||p=="all") body+=window.formatSearchResults_buttons(text,matches);
	}
	return body;
}

if (!window.formatSearchResults_again) window.formatSearchResults_again=function(text,matches)
{
	var title=config.macros.search.reportTitle
	var body='';
	// search again
	body+='{{span{<<search "'+text.replace(/"/g,'&#x22;')+'">> /%\n';
	body+='%/<html><input type="button" value="søg igen"';
	body+=' onclick="var t=this.parentNode.parentNode.getElementsByTagName(\'input\')[0];';
	body+=' config.macros.search.doSearch(t); return false;">';
	if (!config.options.chkSearchResultsOptions) { // omit "muligheder..."
		body+='</html>}}}\n\n';
		return body;
	}
	body+=' <a href="javascript:;" onclick="';
	body+=' var e=this.parentNode.nextSibling;';
	body+=' var show=e.style.display!=\'block\';';
	body+=' if(!config.options.chkAnimate) e.style.display=show?\'block\':\'none\';';
	body+=' else anim.startAnimating(new Slider(e,show,false,\'none\'));';
	body+=' return false;">muligheder...</a>';
	body+='</html>@@display:none;border-left:1px dotted;margin-left:1em;padding:0;padding-left:.5em;font-size:90%;/%\n';
	body+='	%/<<option chkSearchTitles>>titler /%\n';
	body+='	%/<<option chkSearchText>>tekst /%\n';
	body+='	%/<<option chkSearchTags>>tags /%\n';
	body+='	%/<<option chkSearchFields>>felter /%\n';
	body+='	%/<<option chkSearchShadows>>skygger\n';
	body+='	<<option chkCaseSensitiveSearch>>store-små bogstaver /%\n';
	body+='	%/<<option chkRegExpSearch>>tekst mønstre /%\n';
	body+='	%/<<option chkSearchByDate>>sorteret efter dato\n';
	body+='	<<option chkSearchHighlight>> markér matchende tekst i de viste tiddlere\n';
	body+='	<<option chkIncrementalSearch>>tegn efter tegn søgning: /%\n';
	body+='	%/{{twochar{<<option txtIncrementalSearchMin>>}}} eller flere tegn, /%\n';
	body+='	%/{{threechar{<<option txtIncrementalSearchDelay>>}}} msek forsinkelse\n';
	body+='	<<option chkSearchOpenTiddlers>> søg kun i allerede åbne tiddlere\n';
	body+='	<<option chkSearchExcludeTags>>udelad tiddlere der er tagget med:\n';
	body+='	{{editor{<<option txtSearchExcludeTags>>}}}/%\n';
	body+='%/@@}}}\n\n';
	return body;
}

if (!window.formatSearchResults_summary) window.formatSearchResults_summary=function(text,matches)
{
	// summary: nn tiddlers found matching '...', options used
	var body='';
	var co=config.options; // abbrev
	var title=config.macros.search.reportTitle
	var q = co.chkRegExpSearch ? "/" : "'";
	body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\n";
	var opts=[];
	if (co.chkSearchTitles) opts.push("titler");
	if (co.chkSearchText) opts.push("tekst");
	if (co.chkSearchTags) opts.push("tags");
	if (co.chkSearchFields) opts.push("felter");
	if (co.chkSearchShadows) opts.push("skygger");
	if (co.chkSearchOpenTiddlers) body+="^^//search limited to displayed tiddlers only//^^\n";
	body+="~~&nbsp; søgte i "+opts.join(" + ")+"~~\n";
	body+=(co.chkCaseSensitiveSearch||co.chkRegExpSearch?"^^&nbsp; og brugte ":"")
		+(co.chkCaseSensitiveSearch?"case-sensitive ":"")
		+(co.chkRegExpSearch?"pattern ":"")
		+(co.chkCaseSensitiveSearch||co.chkRegExpSearch?"matching^^\n":"");
	return body;
}

if (!window.formatSearchResults_list) window.formatSearchResults_list=function(text,matches)
{
	// bullet list of links to matching tiddlers
	var body='';
	var co=config.options; // abbrev
	var pattern=co.chkRegExpSearch?text:text.escapeRegExp();
	var sensitive=co.chkCaseSensitiveSearch?"mg":"img";
	var link='{{tiddlyLinkExisting{<html><nowiki><a href="javascript:;" onclick="'
		+'if(config.options.chkSearchHighlight)'
		+'	highlightHack=new RegExp(\x27'+pattern+'\x27.escapeRegExp(),\x27'+sensitive+'\x27);'
		+'story.displayTiddler(null,\x27%0\x27);'
		+'highlightHack = null; return false;'
		+'" title="%2">%1</a></html>}}}';
	for(var t=0;t<matches.length;t++) {
		body+="* ";
		if (co.chkSearchByDate)
			body+=matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" ";
		var title=matches[t].title;
		var fixup=title.replace(/'/g,"\\x27").replace(/"/g,"\\x22");
		var tid=store.getTiddler(title);
		var tip=tid?tid.getSubtitle():''; tip=tip.replace(/"/g,"&quot;");
		body+=link.format([fixup,title,tip])+'\n';
	}
	return body;
}

if (!window.formatSearchResults_buttons) window.formatSearchResults_buttons=function(text,matches)
{
	// embed buttons only if writing SearchResults to tiddler
	if (!config.options.chkSearchListTiddler) return "";
	// "open all" button
	var title=config.macros.search.reportTitle;
	var body="";
	body+="@@diplay:block;<html><input type=\"button\" href=\"javascript:;\" "
		+"onclick=\"story.displayTiddlers(null,[";
	for(var t=0;t<matches.length;t++)
		body+="'"+matches[t].title.replace(/\'/mg,"\\'")+"'"+((t<matches.length-1)?", ":"");
	body+="],1);\" accesskey=\"O\" value=\"åben alle matchende tiddlere\"></html> ";
	// "discard SearchResults" button
	body+="<html><input type=\"button\" href=\"javascript:;\" "
		+"onclick=\"discardSearchResults()\" value=\"kassér "+title+"\"></html>";
	body+="@@\n";
	return body;
}

if (!window.discardSearchResults) window.discardSearchResults=function()
{
	// remove the tiddler
	story.closeTiddler(config.macros.search.reportTitle);
	store.deleteTiddler(config.macros.search.reportTitle);
	store.notify(config.macros.search.reportTitle,true);
}
//}}}
/***
|Name|SectionLinksPlugin|
|Source|http://www.TiddlyTools.com/#SectionLinksPlugin|
|Documentation|http://www.TiddlyTools.com/#SectionLinksPlugin|
|Version|1.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|allow tiddler sections in TiddlyLinks to be used as anchor points|
This plugin enhances the processing of section references so they can be used in links to auto-scroll to the indicated heading within a tiddler (i.e., similar to the 'anchor' behavior provided in HTML by {{{<a name="foo">}}} and {{{<a href="#foo">...</a>}}})
!!!Usage
<<<
!!!!~TiddlyLink syntax
>The standard link syntax has been extended so that a section name can included in a tiddler link (e.g., {{{[[SomeTiddler##SomeSection]]}}}).  When clicked, the tiddler is displayed and the specified section heading will be automatically scrolled into view. If the tiddler title is omitted or the 'here' keyword is used (e.g., {{{[[##SomeSection]]}}} or {{{[[here##SomeSection]]>>}}}), then the current containing tiddler is implied by default.
>
>//Note: the enhanced "section"" link syntax can also be used with ''anchor'' elements defined by HTML syntax://
>>{{{<html><a name="sectionname" /></html>}}}
>//This provides an alternative syntax can automatically scroll to content without requiring use of the standard TW section ''heading'' syntax.//
!!!!{{{<<tiddler>>}}} macro 
>The {{{<<tiddler SomeTiddler##SomeSection>>}}} syntax has been extended so that when the tiddler title is omitted or the 'here' keyword is used (e.g., {{{<<tiddler ##SomeSection>>}}} or {{{<<tiddler here##SomeSection>>}}}), then the current containing tiddler is implied by default.
!!!!"""<<sectionTOC>>""" macro
>This macro generates a 'Table of Contents'-style numbered-bullet list with links to all sections within the current tiddler.  Simply place the following macro at the //end of the tiddler content// (i.e., following all section headings):
{{{
<<sectionTOC>> or <<sectionTOC className>>
}}}
>Note: The macro must occur at the end of the tiddler in order to locate the rendered section headings that precede it. In addition, to position the macro's //output// within the tiddler, you must create a special 'target element' that uses a specified classname (default='sectionTOC'), like this:
{{{
{{sectionTOC{}}}
}}}
>When the {{{<<sectionTOC>>}}} macro is rendered, it will find the matching 'sectionTOC'-classed element and writes it's output there.  You can also add the macro and/or target elements directly to the [[ViewTemplate]] definition, so that every tiddler can automatically display the table of contents:
{{{
<span class='sectionTOC'></span> <!-- target element -->
...
<span macro='sectionTOC'></span> <!-- must be at end of tiddler -->
}}}
<<<
!!!Examples
<<<
links to sections defined by ''TW heading syntax'' (e.g, {{{!!!sectionname}}}):{{indent{
[[SectionLinksPlugin##onClickTiddlerLink]]
[[##onClickTiddlerLink]] //(current tiddler implied)//}}}
links to anchors defined by ''HTML syntax'' (e.g., {{{<html><a href="anchorname"></html>}}}):{{indent{
[[SectionLinksPlugin##sampleanchorlink]]
[[##sampleanchorlink]] //(current tiddler implied)//}}}
<<<
!!!Revisions
<<<
2011.02.08 1.4.1 in isExternalLink() hijack, strip section references before testing for external link
2010.08.09 1.4.0 in scrollToSection(), added support for using HTML <a name="..."> anchor elements
2009.08.21 1.3.4 added handling to ignore leading/trailing whitespace in section references
2009.08.21 1.3.3 in createTiddlyLink(), add tiddlyLinkNonExistingSection class if matching section is not found
2009.08.14 1.3.2 in createTiddlyLink(), don't override core value for ~TiddlyLink attribute
2009.08.02 1.3.1 in sectionTOC.handler(), trim leading/trailing whitespace from generated section links
2009.08.01 1.3.0 in scrollToSection(), apply 3-tier section matching (exact, startsWith, contains)
2009.07.06 1.2.2 fixed displayTiddler() hijack
2009.07.03 1.2.1 in {{{<<sectionTOC>>}}}, suppress output if target is not found
2009.06.02 1.2.0 added support for 'here' keyword in {{{[[here##section]]}}} links and {{{<<tiddler here##section>>}}} macro
2009.04.09 1.1.1 in sectionTOC macro, make target visible when TOC is rendered.
2009.01.18 1.1.0 added {{{<<sectionTOC>>}}} macro to generate numbered-bullet links to sections of current tiddler
2009.01.06 1.0.0 converted to stand-alone plugin
2008.10.14 0.0.0 initial release (as [[CoreTweaks]] #784 - http://trac.tiddlywiki.org/ticket/784)
<<<
!!!Code
***/
//{{{
version.extensions.SectionLinksPlugin= {major: 1, minor: 4, revision: 1, date: new Date(2011,2,8)};

Story.prototype.scrollToSection = function(title,section) {
	if (!title||!section) return; var t=this.getTiddler(title); if (!t) return null;
	var elems=t.getElementsByTagName('*');
	var heads=[]; var anchors=[];
	for (var i=0; i<elems.length; i++)
		if (['H1','H2','H3','H4','H5'].contains(elems[i].nodeName)) heads.push(elems[i]);
	for (var i=0; i<elems.length; i++)
		if (elems[i].nodeName=='A' && (elems[i].getAttribute('name')||'').length) anchors.push(elems[i]);
	var found=null;
	for (var i=0; i<heads.length; i++)
		if (getPlainText(heads[i]).trim()==section) { found=heads[i]; break; }
	if (!found) for (var i=0; i<heads.length; i++)
		if (getPlainText(heads[i]).trim().startsWith(section)) { found=heads[i]; break; }
	if (!found) for (var i=0; i<heads.length; i++)
		if (getPlainText(heads[i]).trim().indexOf(section)!=-1) { found=heads[i]; break; }
	if (!found) for (var i=0; i<anchors.length; i++)
		if (anchors[i].getAttribute('name')==section) { found=anchors[i]; break; }
	if (!found) for (var i=0; i<anchors.length; i++)
		if (anchors[i].getAttribute('name').startsWith(section)) { found=anchors[i]; break; }
	if (!found) for (var i=0; i<anchors.length; i++)
		if (anchors[i].getAttribute('name').indexOf(section)!=-1) { found=anchors[i]; break; }
	if (found) {
		// if section heading is collapsed, click to expand it - see [[FoldHeadingsPlugin]]
		if (hasClass(found,'foldable') && found.nextSibling.style.display=='none') found.onclick();
		// scroll *after* tiddler animation
		var delay=config.options.chkAnimate?config.animDuration+100:0;
		setTimeout('window.scrollTo('+findPosX(found)+','+findPosY(found)+')',delay);
		return found;
	}
}
//}}}
/***
!!!!core hijacks
***/
/***
!!!!!createTiddlyLink
***/
//{{{
// [[tiddlername##section]] and [[##section]]
if (!window.createTiddlyLink_section)
	window.createTiddlyLink_section=window.createTiddlyLink;
window.createTiddlyLink=function(place,title) {
	var t=story.findContainingTiddler(place); var tid=t?t.getAttribute('tiddler'):'';
	var parts=title.split(config.textPrimitives.sectionSeparator);
	var title=parts[0]; var section=parts[1]; if (section) section=section.trim();
	if (!title.length || title.toLowerCase()=='here') title=tid;  // default=current tiddler
	arguments[1]=title;
	var btn=createTiddlyLink_section.apply(this,arguments);
	if (section) {
		btn.setAttribute('section',section);
		if (store.getTiddlerText(title+config.textPrimitives.sectionSeparator+section)===null)
			addClass(btn,'tiddlyLinkNonExistingSection');
	}
	return btn;
}
//}}}
/***
!!!!!onClickTiddlerLink
***/
//{{{
if (!window.onClickTiddlerLink_section)
	window.onClickTiddlerLink_section=window.onClickTiddlerLink;
window.onClickTiddlerLink=function(ev) {
	var e=ev||window.event;	var target=resolveTarget(e); var title=null;
	while (target!=null && title==null) {
		title=target.getAttribute('tiddlyLink');
		section=target.getAttribute('section');
		target=target.parentNode;
	} 
	var t=story.findContainingTiddler(target); var tid=t?t.getAttribute('tiddler'):'';
	if (title!=tid||!section) // avoid excess scrolling for intra-tiddler links
		onClickTiddlerLink_section.apply(this,arguments);
	story.scrollToSection(title,section);
	return false;
}
//}}}
/***
!!!!! displayTiddler
***/
//{{{
if (!Story.prototype.displayTiddler_section)
	Story.prototype.displayTiddler_section=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var parts=title.split(config.textPrimitives.sectionSeparator);
	var title=parts[0]; var section=parts[1]; if (section) section=section.trim();
	if (!title.length || title.toLowerCase()=='here') {
		var t=story.findContainingTiddler(place);
		title=t?t.getAttribute('tiddler'):'';
	}
	arguments[1]=title;  // default=current tiddler
	this.displayTiddler_section.apply(this,arguments);
	story.scrollToSection(title,section);
}
//}}}
/***
<html><a name="sampleanchorlink" /></html>This is a sample ''anchor link'': {{{<html><a name="sampleanchorlink" /></html>}}}
!!!!!isExternalLink
***/
//{{{
if (!config.formatterHelpers.isExternalLink_section)
	config.formatterHelpers.isExternalLink_section=config.formatterHelpers.isExternalLink;
config.formatterHelpers.isExternalLink=function(link) {  // remove section references before testing
	var l=link.split(config.textPrimitives.sectionSeparator)[0];
	return config.formatterHelpers.isExternalLink_section(l);
}
//}}}
/***
!!!!!tiddler.handler
***/
//{{{
if (!config.macros.tiddler.handler_section)
	config.macros.tiddler.handler_section=config.macros.tiddler.handler;
config.macros.tiddler.handler=function(place,macroName,params,wikifier,paramString,tiddler)
{
	if (!params[0]) return;
	var sep=config.textPrimitives.sectionSeparator;
	var parts=params[0].split(sep); var tid=parts[0]; var sec=parts[1]; if (sec) sec=sec.trim();
	if ((tid.toLowerCase()=='here'||!tid.length) && sec) { // fixup for 'here##section' and '##section'
		var here=story.findContainingTiddler(place)
		var tid=here?here.getAttribute('tiddler'):tiddler?tiddler.title:'';
		arguments[2][0]=tid+sep+sec;
		arguments[4]=paramString.replace(new RegExp('(here)?'+sep+sec),tid+sep+sec);
	}
	config.macros.tiddler.handler_section.apply(this,arguments);
}
//}}}
/***
!!!!sectionTOC macro
***/
//{{{
config.macros.sectionTOC = {
	targetClass: 'sectionTOC',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var out=[];
		var targetClass=params[0]||this.targetClass;
		var t=story.findContainingTiddler(place); if (!t) return;
		var elems=t.getElementsByTagName('*');
		var level=5; // topmost heading level
		for (var i=0; i<elems.length; i++) {
			var txt=getPlainText(elems[i]).trim();
			var link='[['+txt+'|##'+txt+']]';
			switch(elems[i].nodeName) {
				case 'H1': out.push('#'+link);		level=1; break;
				case 'H2': out.push('##'+link);		level=level<2?level:2; break;
				case 'H3': out.push('###'+link);	level=level<3?level:3; break;
				case 'H4': out.push('####'+link);	level=level<4?level:4; break;
				case 'H5': out.push('#####'+link);	level=level<5?level:5; break;
				default: if (hasClass(elems[i],targetClass)) var target=elems[i];
			}
		}
		// trim excess bullet levels
		if (level>1) for (var i=0; i<out.length; i++) out[i]=out[i].substr(level-1);
		// show numbered list
		if (out.length && target) {
			if (target.style.display=='none') target.style.display='block';
			wikify(out.join('\n'),target);
		}
	}
}
//}}}
/***
!!!Invoke macro
{{{
<<sectionTOC>>
}}}
***/
// //<<sectionTOC>>
/***
Quick and dirtly palette switcher for 2.1.x
<<selectPalette>>
WARNING this will overwrite your ColorPalette tiddler.
***/

//{{{

merge(config.macros,{

	setPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var paletteName = params[0] ? params[0] : tiddler.title;
			createTiddlyButton(place,"apply","Apply this palette",function(e) {
				config.macros.selectPalette.updatePalette(tiddler.title);
				return false;
			});
		}
	},

	selectPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			createTiddlyDropDown(place,this.onPaletteChange,this.getPalettes());
		},

		getPalettes: function() {
			var result = [
				{caption:"vælg palet", name:""},
				{caption:"(Default)", name:"(default)"}
			];
			var tagged = store.getTaggedTiddlers("palette","title");
			for(var t=0; t<tagged.length; t++)
				result.push({caption:tagged[t].title, name:tagged[t].title});
			return result;
		},

		onPaletteChange: function(e) {
			config.macros.selectPalette.updatePalette(this.value);
			return true;
		},

		updatePalette: function(title) {
			if (title != "") {
				store.deleteTiddler("ColorPalette");
				if (title != "(default)")
					store.saveTiddler("ColorPalette","ColorPalette",store.getTiddlerText(title),
								config.options.txtUserName,undefined,"");
				this.refreshPalette();
				if(config.options.chkAutoSave)
					saveChanges(true);
			}
		},

		refreshPalette: function() {
			config.macros.refreshDisplay.onClick();
		}
	}
});

//}}}
/***
|Name|SetIconPlugin|
|Source|http://www.TiddlyTools.com/#SetIconPlugin|
|Documentation|http://www.TiddlyTools.com/#SetIconPluginInfo|
|Version|1.8.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.3|
|Type|plugin|
|Description|add an image to a toolbar, macro, or slider link|
!!!!!Documentation
>see [[SetIconPluginInfo]]
!!!!!Configuration
<<<
<<option chkIconsShowImage>> show images on links
<<option chkIconsShowText>> include link text with images
default image style: {{stretch{<<option txtIconsCSS>>}}}
<<<
!!!!!Revisions
<<<
2008.05.11 [1.8.0] added optional 'notext' value for iconpos to force text to be hidden for specific links
| see [[SetIconPluginInfo]] for additional revision details |
2008.05.09 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.SetIconPlugin= {major: 1, minor: 8, revision: 0, date: new Date(2008,5,11)};

if (config.options.chkIconsShowImage===undefined)
	config.options.chkIconsShowImage=true;
if (config.options.chkIconsShowText===undefined)
	config.options.chkIconsShowText=true;
if (config.options.txtIconsCSS===undefined)
	config.options.txtIconsCSS="vertical-align:middle;width:auto;height:auto";

config.macros.setIcon = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if (!config.options.chkIconsShowImage) return; // text-only - do nothing
		if (!params[0]) return; // no image src specified - do nothing

		// find nearest link element
		var btn=place.lastChild; // look for sibling link
		while (btn && btn.nodeName!="A") btn=btn.previousSibling;
		if (!btn) { // look for child link
			var links=place.getElementsByTagName("A");
			if (links.length) btn=links[links.length-1];
		}
		if (!btn) { // look for parent link
			var btn=place.parentNode.lastChild;
			while (btn && btn.nodeName!="A") btn=btn.previousSibling;
		}
		if (!btn) { // look for cousin link
			var links=place.parentNode.getElementsByTagName("A");
			if (links.length) btn=links[links.length-1];
		}
		if (!btn) return; // can't find a link - do nothing

		// set icon and command text/tip
		var txt=btn.innerHTML;
		var src=params[0];  // default to direct URL
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // retrieve attachment (if any)
		var css=params[1]; if (!css||!css.length) css=config.options.txtIconsCSS;
		var after=params[2]&&params[2].toUpperCase()=="RIGHT";
		var notext=params[2]&&params[2].toUpperCase()=="NOTEXT";
		btn.innerHTML="<img src='"+src+"' style='"+css+"'>";
		if (config.options.chkIconsShowText && !notext)
			btn.innerHTML=after?txt+btn.innerHTML:btn.innerHTML+txt;
		else
			btn.title=txt.toUpperCase()+": "+btn.title; // add text to tooltip

		// adjust nested slider button text/tip
		if (btn.getAttribute("closedtext")!=null) {
			btn.setAttribute("closedtext",btn.innerHTML);
			btn.setAttribute("openedtext",btn.innerHTML);
			if (!config.options.chkIconsShowText || notext) {
				btn.setAttribute("closedtip",txt.toUpperCase()+": "+btn.getAttribute("closedtip"));
				btn.setAttribute("openedtip",txt.toUpperCase()+": "+btn.getAttribute("openedtip"));
			}
		}
	}
};
//}}}
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<tiddler TiddlyHomeSidebar>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">><<tiddler TspotSidebar>><<tiddler [[SideBarOptions##tema]]>><<tiddler SideBarOptions##toggleReadonly>>/%
!tema
@@position:relative;+++^^*[tema »|Skift tema eller farveskema]<<switchTheme width:auto>>
{{smallform{<<selectPalette>>}}}
<<RandomColorPaletteButton>> ⇐ [[Ny palet|ColorPalette]]  
----
===@@
!toggleReadonly
<html><nowiki><span class='button' onclick="return this.getElementsByTagName('input')[0].click();"
	title="Slå redigering af dette dokument til/fra">
<input type='checkbox' style="margin:0;padding:0;" onclick="
	window.readOnly=!this.checked;
	config.macros.option.propagateOption('chkHttpReadOnly','checked',window.readOnly,'input')
	config.macros.option.propagateOption('chkSinglePageMode','checked',window.readOnly,'input')
	window.showBackstage=!window.readOnly;
	if(showBackstage && !backstage.area) backstage.init();
	backstage.button.style.display=showBackstage?'block':'none';
	backstage.hide();
	story.switchTheme(config.options.txtTheme);
	store.notifyAll();
	story.refreshAllTiddlers(true);
	return false;
"> redigér til/fra</span></html><<tiddler {{
	var chk=place.lastChild.getElementsByTagName('input')[0];
	chk.checked=!window.readOnly;
'';}}>>
!end %/
virtuelle pc'er via http
Ulteo
{{{
Background:#FAFAFA
Foreground:#000
PrimaryPale:#999
PrimaryLight:#777
PrimaryMid:#111
PrimaryDark:#000
SecondaryPale:#CCF
SecondaryLight:#9AF
SecondaryMid:#69C
SecondaryDark:#05A
TertiaryPale:#EEE
TertiaryLight:#CCC
TertiaryMid:#999
TertiaryDark:#333
Error:#F88
}}}
/*{{{*/

.switcher { position: absolute; top: 1em; right: 1em; }

#tiddlerDisplay {
	margin: 1em 3em;
}

.tiddler {
	margin: 1em;
	float: left;
}

.tiddler .sticky-note {
	color:#000;  
	background:#ffc;  
	display:block; 
	height: 12em;
	width: 12em;
	padding:1em;
	-moz-box-shadow:5px 5px 7px rgba(33,33,33,1);
	-webkit-box-shadow: 5px 5px 7px rgba(33,33,33,.7);  
	box-shadow: 5px 5px 7px rgba(33,33,33,.7); 
	-moz-transition:-moz-transform .25s linear; 
	-webkit-transition:-webkit-transform .25s linear;
	-o-transition:-o-transform .25s linear; 
}

.tiddler.yellow .sticky-note { background: [[StickyColors::Yellow]];}
.tiddler.pink .sticky-note { background: #f7cce3;}
.tiddler.green .sticky-note { background: [[StickyColors::Green]];}

.sticky-note .modified-date {
	color: #999;
	font-size: 0.75em;
}

.tiddler:nth-child(even) .sticky-note{
	-o-transform:rotate(4deg);
	-webkit-transform:rotate(4deg);
	-moz-transform:rotate(4deg);
}

.tiddler .sticky-note:hover,
.tiddler:nth-child(even) .sticky-note:hover,
.tiddler:nth-child(3n) .sticky-note:hover,
.tiddler:nth-child(5n) .sticky-note:hover,
.tiddler:nth-child(7n) .sticky-note:hover {
	-moz-box-shadow:10px 10px 7px rgba(0,0,0,.7); 
   	-webkit-box-shadow:10px 10px 7px rgba(0,0,0,.7); 
   	box-shadow:10px 10px 7px rgba(0,0,0,.7); 
   	 -webkit-transform: scale(1.25);
   	 -moz-transform: scale(1.25);
   	 -o-transform: scale(1.25);
	position: relative;
	z-index: 5;
}

.tiddler:nth-child(3n) .sticky-note{
	-o-transform:rotate(-3deg);
	-webkit-transform:rotate(-3deg);
	-moz-transform:rotate(-3deg); 
}

.tiddler:nth-child(5n) .sticky-note{
	-o-transform:rotate(2deg);
	-webkit-transform:rotate(2deg);
	-moz-transform:rotate(2deg); 
}

.tiddler:nth-child(7n) .sticky-note{
	-o-transform:rotate(-10deg);
	-webkit-transform:rotate(-10deg);
	-moz-transform:rotate(-10deg); 
}

.sticky-note h2 {
	font-size: 1.3em;
	font-weight: bold;
	margin: 0 0 0 0;
	padding: 0 0 0.8em 0;
	border: none;
}

.sticky-note .viewer {
	margin: 0;
	font-family:helvetica; 
    	font-style: italic;
	padding: 0;
}

.sticky-note img { height: 8em; }

/*}}}*/
[[StyleSheetShortcuts]]
/*{{{*/
body {
background: url('./ovd.png') no-repeat center center fixed;
	-webkit-background-size: cover;
	-moz-background-size: cover;
	-o-background-size: cover;
	background-size: cover;
}
/*}}}*/
/***
|Name|StyleSheetAdjustments|
|Source|http://www.TiddlyTools.com/#StyleSheetAdjustments|
|Version||
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|CSS|
|Description|adjust TiddlyWiki default shadow stylesheets definitions|
***/

[[StyleSheetPlugins]] /* include adjustments to plugin-supplied definitions */
[[StyleSheetShortcuts]] /* include formatting "shortcut" definitions */
[[Jash.css]] /* Javascript Shell (jash) Styles */

/***
These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.
/***
!body /%==================================================%/
IE needs explicit "position:static" declaration (fixes 'partial background display bug')
***/
/*{{{*/
body { font-family: Verdana,Arial,Helvetica; position:static; }
/*}}}*/

/***
!backstage /%==================================================%/
fix for bug #347/#349, wherein backstageCloak covers backstagePanel whenever fixed elements are present
***/
/*{{{*/
#backstageCloak { z-index:49; }
#backstagePanel { margin:0em 0.5em 0em 0.5em; } 
#backstageButton a:hover
	{background-color:transparent !important;}

/*}}}*/

/***
!common colors /%==================================================%/
***/
/*{{{*/
/* these seem to have been omitted from the core defaults for link styles */
a { color:#014; }
a:hover	{ color:#def; }
/*}}}*/

/***
!HTML forms /%==================================================%/
***/
/*{{{*/
/* eliminate whitespace before/after form controls */
form { margin:0;padding:0; }
/*}}}*/

/***
!basic styling /%==================================================%/
***/
/*{{{*/
/* reduce whitespace before/after horizontal rule */
hr { margin:2px 0 1px 0;padding:0; }
/*}}}*/

/***
!header and titles /%==================================================%/
IE needs explicit "position:static" declaration (fixes 'background display hides text bug')
***/
/*{{{*/
.header
	{ background:transparent; padding:.2em 1em; position:static; margin-bottom:.5em; }
.headerShadow, .headerForeground
	{ padding:.5em; }
.header a, .header .button, .header .tiddlyLinkExisting, .header .tiddlyLinkNonExisting
	{ font-weight: normal; }
.header .externalLink,
.siteSubtitle a, .siteSubtitle .button, .siteSubtitle .tiddlyLinkExisting, .siteSubtitle .tiddlyLinkNonExisting
	{ text-decoration:none; }
.header table
	{ border-collapse: collapse !important; }

/*}}}*/

/***
!displayArea /%==================================================%/
***/
/*{{{*/
#displayArea
	{ margin:0em 17em 0em 11em; }
/*}}}*/


/***
!popups /%==================================================%/
white-space:nowrap prevents items from wrapping if popup is near right edge of window
z-index:1000 makes sure popup is above EVERYTHING else
***/
/*{{{*/
.popup
	{ white-space: nowrap; z-index:1000; color: #000; background: #ffe; border: 1px solid #000;
		-moz-border-radius-topright: 5px; -moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomright: 5px;
		-webkit-border-top-right-radius: 5px; -webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-right-radius: 5px; }
.popup a, .popup .button, .popup .tiddlyLinkExisting, .popup .tiddlyLinkNonExisting
	{ font-weight: normal; font-style: normal; }
.popup hr
	{ color: #000; background: #ddd; border: 0; }
.popup li.disabled
	{ color: #999; }
.popup li a, .popup li a:visited
	{ color: #300; padding:1px; }
.popup li a:hover
	{ background: #006; color: #fff !important;}
/*}}}*/

/***
!messageArea /%==================================================%/
***/
/*{{{*/
#messageArea
	{ font-size:90%; -moz-border-radius:1em;-webkit-border-radius:1em; background:#eee; }
/*}}}*/

/***
!main menu (left sidebar) /%==================================================%/
***/
/*{{{*/
#mainMenu
	{ z-index:1; width:9em; text-align:left; margin:0; margin-left:1.5em; padding:0; clear:both; }
*[id="mainMenu"] /* moz browsers only */
	{ width:auto !important; } 
/*}}}*/

/***
!sidebar (right sidebar) /%==================================================%/
***/
/*{{{*/
#sidebar
	{ width:17em; margin-right:0em; clear:both; }
#sidebarTabs .tab
	{ font-size:90%; -moz-border-radius-topleft:.5em; -moz-border-radius-topright:.5em;
		-webkit-border-top-left-radius:.5em; -webkit-border-top-right-radius:.5em; }
#sidebarTabs .tabContents
	{ background:transparent; border:1px solid #999; padding:.5em; height:auto; overflow:auto; width:92.5%; }
#sidebarTabs .tabContents .tabContents
	{ background:transparent; border:1px solid #999; padding:.5em; height:auto; }
#sidebarOptions input[type="text"]
	{ font-size:8pt; }
}
*/
/*}}}*/

/***
!tabs /%==================================================%/
***/
/*{{{*/
.tabset
	{ padding: 0.2em 0 0 0; }
.tab
	{ padding:0 1px 0 1px; }
.viewer .tab
	{ padding:0 .5em 0 .5em; }
.tabSelected
	{ border: 1px solid; border-bottom: 0px !important; margin-bottom:-2px !important;
		 -moz-border-radius-topleft:.5em; -moz-border-radius-topright:.5em;
		 -webkit-border-top-left-radius:.5em; -webkit-border-top-right-radius:.5em;}
.tabUnselected
	{ border: 1px solid #999; border-bottom:0px;
		-moz-border-radius-topleft:.5em; -moz-border-radius-topright:.5em;
		-webkit-border-top-left-radius:.5em; -webkit-border-top-right-radius:.5em;}
.tabContents
	{ border: 1px solid; -moz-border-radius:1em;-webkit-border-radius:1em; padding: 1em; }
/*}}}*/

/***
!tiddler display elements /%==================================================%/
***/
/*{{{*/
.tiddler { padding: 0 1em 1em 1em; }
.annotation {
	border: 1px solid;
	-moz-border-radius:.5em;
	-webkit-border-radius:.5em;
	margin: .5em 0;
	padding: .2em .5em;
	font-size:90%;
}
.button, .button:hover, .button:active,
.viewer .button, .viewer .button:hover, .viewer .button:active
	{ background:transparent; border:0; }
.toolbar
	{ float:right; display:inline; padding-bottom:0; visibility:hidden; }
.selected .toolbar
	{ visibility:visible; }
.toolbar .floatingPanel
	{ visibility:visible !important; } /* make sure floating panels from toolbars don't disappear on mouseout */
.toolbar .button, .toolbar a
	{ border:1px solid transparent; background:transparent; margin:0px 1px; padding:0px .2em; -moz-border-radius:.5em;-webkit-border-radius:.5em; }
.toolbar
	{color:[[ColorPalette::TertiaryLight]];}
.toolbar a
	{color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar
	{color:[[ColorPalette::Foreground]];}
.selected .toolbar, .selected .toolbar .button, .selected .toolbar a
	{ color:#006; }
.toolbar .button:hover, .toolbar a:hover
	{ border:1px solid #69c !important; background:#006 !important; color:#fff !important; }
.shadow .tagging, .shadow .tagged
	{ display:none; }
.tagging, .tagged
	{ background-color: #ccc; border: 1px solid; }
.selected .tagging, .selected .tagged
	{ background-color:#eee; border: 1px solid #999; }
.tagging, .tagged
	{ -moz-border-radius:1em;-webkit-border-radius:1em; }
.subtitle
	{ font-size:90%; }
.shadow input, .shadow textarea, .shadow button, .shadow checkbox, .shadow radio, .shadow select
	{ font-size:90%; }
.shadow input, .shadow textarea, .shadow button, .shadow checkbox, .shadow radio, .shadow select
	{ font-size:90%; }
.editor input
	{ font-size: 8pt;}
.editor textarea
	{ font-size: 8pt; font-family:monospace; }
.editor select
	{ font-size: 8pt; border:1px solid; }
.title
	{ font-size: 12pt; line-height:120%; }
.viewer
	{ font-size: 9pt; padding: 0.7em; text-align:justify; }
.viewer pre, .viewer code, .viewer blockquote
	{ font-size:8pt; text-align:left; }
.viewer pre 
	{ background:#ffe; border:1px solid; }
.viewer table, .viewer table tr, .viewer table td
	{ border:1px solid; }
.viewer hr {
	margin: 1px; padding:1px;
	border:0;
	border-top: solid 1px #666;
	color: #666;
}
.viewer blockquote {
	line-height: 1.5em;
	padding-left: 1em;
	margin-left: 1em;
	border-left: 1px dotted;
}
/*}}}*/
/***
|Name|StyleSheetShortcuts|
|Source|http://www.TiddlyTools.com/#StyleSheetShortcuts|
|Version||
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|CSS|
|Description|'convenience' classes for common formatting, alignment, boxes, tables, etc.|

These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.
***/
/*{{{*/

/* text alignments */
.left
	{ display:block;text-align:left; }
.center
	{ display:block;text-align:center; }
.center table
	{ margin:auto !important; }
.right	
	{ display:block;text-align:right; }
.justify
	{ display:block;text-align:justify; }
.indent
	{ display:block;margin:0;padding:0;border:0;margin-left:2em; }
.floatleft
	{ float:left; }
.floatright
	{ float:right; }
.valignTop, .valignTop table, .valignTop tbody, .valignTop th, .valignTop tr, .valignTop td
	{ vertical-align:top; }
.valignBottom, .valignBottom table, .valignBottom tbody, .valignBottom th, .valignBottom tr, .valignBottom td
	{ vertical-align:bottom; }
.clear
	{ clear:both; }
.wrap
	{ white-space:normal; }
.nowrap
	{ white-space:nowrap; }
.hidden
	{ display:none; }
.show
	{ display:inline !important; }
.span
	{ display:span; }
.block
	{ display:block; }
.relative
	{ position:relative; }
.absolute
	{ position:absolute; }

/* font sizes */
.big
	{ font-size:14pt;line-height:120% }
.medium
	{ font-size:12pt;line-height:120% }
.normal
	{ font-size:9pt;line-height:120% }
.small
	{ font-size:8pt;line-height:120% }
.fine
	{ font-size:7pt;line-height:120% }
.tiny
	{ font-size:6pt;line-height:120% }
.larger
	{ font-size:120%; }
.smaller
	{ font-size:80%; }

/* font styles */
.bold
	{ font-weight:bold; }
.italic
	{ font-style:italic; }
.underline
	{ text-decoration:underline; }

/* plain list items (no bullets or indent) */
.nobullets li { list-style-type: none; margin-left:-2em; }

/* vertical tabsets - courtesy of Tobias Beer */
.vTabs .tabset {float:left;display:block;padding:0px;margin-top:.5em;min-width:20%;}
.vTabs .tabset .tab {display:block;text-align:right;padding:2px 3px 2px 7px; margin:0 1px 1px 0;}
.vTabs .tabContents {margin-left:20%;max-width:80%;padding:5px;}
.vTabs .tabContents .tabContents {border:none; background:transparent;}

/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
	-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
	-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
	column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
	-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
	-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
	column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
	-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
	-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
	column-count:4; column-gap:1em; column-width:25%; /* Opera */
}

/* page breaks */
.breakbefore { page-break-before:always; }
.breakafter { page-break-before:always; } 

/* show/hide browser-specific content for InternetExplorer vs. non-IE ("moz") browsers */
*[class="ieOnly"]
	{ display:none; } /* hide in moz (uses CSS selector) */
* html .mozOnly, *:first-child+html .mozOnly
	{ display: none; } /* hide in IE (uses IE6/IE7 CSS hacks) */

/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
	{ border:0 !important; margin:0 !important; padding:0 !important; }
.widetable, .widetable table
	{ width:100%; }

/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }

/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }

/* grouped content */
.outline
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; }
.menubox
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox code
	{ color:#333 !important; }
.borderleft
	{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
.borderright
	{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
.borderbottom
	{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
.bordertop
	{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }

/* scrolled content */
.scrollbars { overflow:auto; }
.height10em { height:10em; }
.height15em { height:15em; }
.height20em { height:20em; }
.height25em { height:25em; }
.height30em { height:30em; }
.height35em { height:35em; }
.height40em { height:40em; }

/* compact form */
.smallform
	{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
	{ font-size:8pt; }

/* stretchable edit fields and textareas (auto-size to fit tiddler) */
.stretch input { width:99%; }
.stretch textarea { width:99%; }

/* compact input fields (limited to a few characters for entering percentages and other small values) */
.onechar input   { width:1em; }
.twochar input   { width:2em; }
.threechar input { width:3em; }
.fourchar input  { width:4em; }
.fivechar input  { width:5em; }

/* text colors */
.white { color:#fff !important }
.gray  { color:#999 !important }
.black { color:#000 !important }
.red   { color:#f66 !important }
.green { color:#0c0 !important }
.blue  { color:#99f !important }

/* rollover highlighting */
.mouseover 
	{color:[[ColorPalette::TertiaryLight]] !important;}
.mouseover a
	{color:[[ColorPalette::TertiaryLight]] !important;}
.selected .mouseover
	{color:[[ColorPalette::Foreground]] !important;}
.selected .mouseover .button, .selected .mouseover a
	{color:[[ColorPalette::PrimaryDark]] !important;}

/* rollover zoom text */
.zoomover
	{ font-size:80% !important; }
.selected .zoomover
	{ font-size:100% !important; }

/* [[ColorPalette]] text colors */
.Background	{ color:[[ColorPalette::Background]];	 }
.Foreground	{ color:[[ColorPalette::Foreground]];	 }
.PrimaryPale	{ color:[[ColorPalette::PrimaryPale]];	 }
.PrimaryLight	{ color:[[ColorPalette::PrimaryLight]];	 }
.PrimaryMid	{ color:[[ColorPalette::PrimaryMid]];	 }
.PrimaryDark	{ color:[[ColorPalette::PrimaryDark]];	 }
.SecondaryPale	{ color:[[ColorPalette::SecondaryPale]]; }
.SecondaryLight	{ color:[[ColorPalette::SecondaryLight]];}
.SecondaryMid	{ color:[[ColorPalette::SecondaryMid]];	 }
.SecondaryDark	{ color:[[ColorPalette::SecondaryDark]]; }
.TertiaryPale	{ color:[[ColorPalette::TertiaryPale]];	 }
.TertiaryLight	{ color:[[ColorPalette::TertiaryLight]]; }
.TertiaryMid	{ color:[[ColorPalette::TertiaryMid]];	 }
.TertiaryDark	{ color:[[ColorPalette::TertiaryDark]];	 }
.Error		{ color:[[ColorPalette::Error]];	 }

/* [[ColorPalette]] background colors */
.BGBackground	  { background-color:[[ColorPalette::Background]];	}
.BGForeground	  { background-color:[[ColorPalette::Foreground]];	}
.BGPrimaryPale	  { background-color:[[ColorPalette::PrimaryPale]];	}
.BGPrimaryLight	  { background-color:[[ColorPalette::PrimaryLight]];	}
.BGPrimaryMid	  { background-color:[[ColorPalette::PrimaryMid]];	}
.BGPrimaryDark	  { background-color:[[ColorPalette::PrimaryDark]];	}
.BGSecondaryPale  { background-color:[[ColorPalette::SecondaryPale]]; 	}
.BGSecondaryLight { background-color:[[ColorPalette::SecondaryLight]];	}
.BGSecondaryMid	  { background-color:[[ColorPalette::SecondaryMid]];	}
.BGSecondaryDark  { background-color:[[ColorPalette::SecondaryDark]]; 	}
.BGTertiaryPale	  { background-color:[[ColorPalette::TertiaryPale]];	}
.BGTertiaryLight  { background-color:[[ColorPalette::TertiaryLight]]; 	}
.BGTertiaryMid	  { background-color:[[ColorPalette::TertiaryMid]];	}
.BGTertiaryDark	  { background-color:[[ColorPalette::TertiaryDark]];	}
.BGError	  { background-color:[[ColorPalette::Error]];	 	}
/*}}}*/
/*{{{*/
.tiddler .originButton div {
	display: inline-block;
}

.tiddler .spaceSiteIcon .siteIcon {
	_display: inline; /* IE doesn't like inline-block */
}

.tiddler .originButton {
	display: block;
}

.selected .tagging,
.selected .tagging:hover {
	border: none;
	background: none;
}

.tagging {
	float: none;
	background: none;
	border: none;
}

.tagging li.listTitle {
	margin-left: 0px;
}
.tagging li {
	margin: 0 8px;
}

.tagging .tiddlyLink {
	-webkit-border-radius: 3px;
	-moz-border-radius: 3px;
	-o-border-radius: 3px;
	border-radius: 3px;
	padding: 1px 2px;
	line-height: 1.2em;
}

/* for following */
#popup .siteIcon {
	float: left;
	height: 25px;
}

.content {
	width: 100%; /* IE */
	font-size: 0.9em;
}

.editorHeading {
	height: 48px;
}

.heading {
	left: 0;
	margin-bottom: 40px;
	position: relative;
	top: 32px;
}

.followButton a {
	display: block;
	margin-top: -20px;
}

.tiddler .followPlaceHolder {
	display: block;
	position: absolute;
	top: 16px;
	right: 64px;
	_right: 138px; // add width of modifierIcon
}

.tiddler .followButton {
	position: relative;
	height: 24px;
	text-align: left;
	color: #fff;
	background: [[ColorPalette::PrimaryMid]];
	padding: 10px 0px 0px 10px;
	width: 38px;
	margin: -16px -8px 24px 0;
}

/* creates the larger triangle */
.followButton:before {
	content: "\00a0";
	display: block; /* reduce the damage in FF3.0 */
	position: relative;
	bottom: -20px;
	right: 0;
	width: 0;
	height: 0;
	border-width: 0 0 20px 20px;
	border-style: solid;
	border-color: transparent [[ColorPalette::PrimaryMid]];
}

.toolbar svg {
	height: 16px;
	width: 16px;
}

.toolbar svg .glyph {
	fill: #ccc;
}

.toolbar a:hover .glyph {
	fill: black;
}

.toolbar a:active .glyph {
	fill: [[ColorPalette::Background]];
}

.originButton,
.followPlaceHolder,
.tiddler .subtitle {
	cursor: pointer;
}

.editSpaceSiteIcon .originButton {
	cursor: auto;
}

.tiddler .subtitle:hover {
	font-weight: bold;
	background: none;
}

.originButton img,
.originButton svg {
	margin-left: 0px;
}

.modifierIcon {
	position: absolute;
	width: 74px;
	top: 0px;
	right: 0px;
	_right: 74px; /* in IE6 positioning works incorrectly so use -width instead */
	text-align: right;
}

.modifierIcon img,
.modifierIcon svg {
	margin-right: 8px;
}

.tiddler .viewer {
	padding-bottom: 16px;
	margin: 0 0 0 56px;
	line-height: 1.4em;
}

.viewer pre {
	margin-left: 0;
}

.siteIcon .label {
	color: [[ColorPalette::TertiaryDark]];
}

.tiddler .spaceSiteIcon {
	float: left;
	margin-right: 0;
	margin-top: 0;
	position: relative;
	display: block;
}

.tiddler .titleBar {
	display: block;
	margin-right: 136px;
	margin-left: 56px;
}

.followButton a {
	color: [[ColorPalette::Background]];
}

.tiddler {
	position: relative;
	padding: 0;
	margin-bottom: 3em;
	border-top: 3px solid [[ColorPalette::PrimaryMid]];
	background: #fff;
}

.tiddler .editor {
	padding: 0px 8px;
}

.tiddler .heading .title {
	position: relative;
	display: block;
	word-wrap: break-word;
	font-size: 32px;
	line-height: 32px;
}
.tiddler .heading .editor.title {
	font-size: 1.7em;
	line-height: normal;
}

.tiddler .headingClear {
	clear: both;
}

.tiddler .subtitle {
	font-style: italic;
	font-size: 0.9em;
	color: #a6a59e;
	margin-top: 0;
}

.toolbar {
	position: absolute;
	padding: 0;
	top: 8px;
	right: -8px;
}

.toolbar .moreCommand.highlight {
	background: none;
}

.tiddler .toolbar .button {
	border: none;
	display: inline;
	padding: 0px;
	margin-right: 16px;
}

.tiddler .toolbar a:hover {
	background: none;
}

.tiddler .tagged .listTitle {
	display: none;
}

.revButton {
	float: right;
}

/*! EditTemplate specific*/
.tiddler .privacySettings {
	text-align: center;
}
.tiddler .privacySettings .originButton {
	display: inline;
}

.editSpaceSiteIcon, .privacyEdit {
	float: left;
}

.editSpaceSiteIcon svg,
.editSpaceSiteIcon img,
.editSpaceSiteIcon .roundelLabel {
	float: left;
}

.tagTitle {
	position: absolute;
	text-align: center;
	width: 48px;
	top: 0px;
	left: -56px;
}

.editSpaceSiteIcon .originButton img,
.editSpaceSiteIcon .originButton svg {
	height: 16px;
	margin-left: 24px;
	margin-right: 32px;
	width: 16px;
}

.tagAnnotation {
	margin-top: 8px;
	padding-bottom: 8px;
}
.annotationsBox {
	margin-top: 8px;
}

.editorFooter {
	position: relative;
	padding: 0;
	margin-top: 16px;
	margin-left: 64px;
}

.tiddler .editorFooter .editor {
	padding-left: 0px;
}

.heading .editor input {
	width: 100%;
	font-size: 1.5em;
}

.spaceSiteIcon .externalImage .image a:hover,
.modifierIcon .externalImage .image a:hover {
	background: none;
}

div.toolbar {
	visibility:hidden;
	right:-16px;
}

.selected div.toolbar {
	visibility: visible;
}

.followButton a:hover {
	background: [[ColorPalette::PrimaryMid]];
	text-decoration: underline;
}

a.image:hover {
	background: transparent;
}

@media all and (max-device-width: 480px) {
	div.toolbar {
		visibility:visible;
	}
}
@media only screen and (device-width: 768px) {
	div.toolbar {
		visibility:visible;
	}
}
@media all and (max-width: 960px) {
	.tiddler .titleBar {
		margin-left: 36px;
		margin-right: 80px;
	}

	.tiddler .heading {
		margin-bottom: 48px;
	}

	.tiddler .heading .title {
		font-size: 32px;
		line-height: 32px;
	}

	.tiddler .modifierIcon img,
	.tiddler .modifierIcon svg,
	.tiddler .spaceSiteIcon .originButton img,
	.originButton svg {
		width: 32px;
		height: 32px;
		margin-left: 0px;
		margin-right: 0px;
	}

	.tiddler .followPlaceHolder {
		right: 48px;
	}

	.tiddler .followButton {
		width: 24px;
	}

	.tiddler .viewer {
		margin: 0px 0px 0px 36px;
		padding-top: 0;
	}

	br {
		line-height: 0.5em;
	}
}
/*}}}*/
/*{{{*/
body {
	font-size: 1em;
	font-family: helvetica, arial, sans-serif;
	background-color: #fff;
	color: [[ColorPalette::Foreground]];
}

body ul { margin: 0; }

#popup {
	background-color: [[ColorPalette::TertiaryPale]];
}

#popup.confirmationPopup, .followList {
	font-size: 0.8em;
	padding: 1em;
	border: solid 1px [[ColorPalette::SecondaryMid]];
	background-color: [[ColorPalette::SecondaryPale]];
}

.followList .listTitle {
	text-decoration: underline;
}

#popup .followTiddlersList a {
	display: inline;
	padding: 0;
}

#popup li a {
	color: [[ColorPalette::PrimaryMid]];
	font-weight: bold;
}

#popup li a:hover {
	color: [[ColorPalette::PrimaryPale]];
	background: [[ColorPalette::PrimaryMid]];
}

#popup li.listTitle {
	border-bottom: 1px solid #000;
	font-weight: bold;
	margin-bottom: 10px;
}

#popup.followList {
	margin-left: 50px;
	margin-top: -30px;
}

.followTiddlersList .label {
	display: block;
	left: 10px;
	top: 0px;
	line-height: 16px;
	position: relative;
}

#popup .followTiddlersList .siteIcon{
	height: auto;
}

#popup .followTiddlersList li{
	clear: both;
	display: block;
	height: 48px;
	margin-bottom: 8px;
	position: relative;
}

#popup .followTiddlersList a{
	display: inline;
}

#displayArea {
	margin: 0;
	top: 0px;
	left: 0px;
	width: 100%;
	position: relative;
}

.revisionCloak {
	position: absolute;
	position: fixed !important;
	height: 100%;
	width: 100%;
	top: 0;
	left: 0;
	border: 0;
	margin: 0;
	padding: 0;
	opacity: 0.5;
	filter: alpha(opacity=50);
	background-color: #000;
}

/* *** Header *** */
.header {
	position: relative;
	background-color: [[ColorPalette::PrimaryMid]];
	_width: 100%; /* ie 6 demands */
}

.headerForeground {
	background-color: [[ColorPalette::PrimaryMid]];
	float: left;
	margin: 24px 16px 0px 72px;
	padding: 0;
	position: relative;
	top: 0;
	_width: 70%; /*ie6: needed for the background to actually be transparent*/
	_background-color: transparent; /*ie6: needed to show the search box*/
}

.clearFloat {
	clear: both;
}

#contentWrapper {
	position: relative;
	padding-top: 1px;
	top: -1px;
}

#tiddlerDisplay {
	_position: relative; /* ie 6*/
}

.siteTitle {
	clear: both;
	display: block;
	font-size: 32px;
	font-weight: bold;
	line-height: 32px;
}

.siteSubtitle {
	display: block;
	font-size: 14px;
	height: 16px;
	margin-bottom: 8px;
}

#sidebarSearch {
	padding: 0;
	position: absolute;
	right: 80px;
	top: 8px;
	width: 176px;
}

#sidebarSearch .txtOptionInput {
	width: 100%;
	margin-top: 5px;
	_color: #bbb; /* ie6 danger */
}

#sidebarSearch .txtOptionInput:focus {
	color: #000;
}

#sidebarSearch .searchButton {
	display: none;
}

/* *** Menu Bar *** */

#mainMenu {
	position: static;
	text-align: left;
	margin-left: 72px;
	float: left;
	width: auto;
	padding: 0;
	font-size: 1em;
	line-height: normal;
}

#mainMenu a {
	color: #fff;
	padding: 8px;
	font-size: 0.9em;
	margin-right: 16px;
}

#mainMenu a:hover {
	background-color: [[ColorPalette::PrimaryMid]];
	color: [[ColorPalette::Background]]
}

#sidebarOptions {
	margin-right: 72px;
	float: right;
	font-size: 1.1em;
	line-height: 1.6em;
	min-height: 1em;
	padding-top: 0;
}

#sidebarOptions a {
	margin-right: 8px;
}

.confirmationPopup .button,
#sidebarOptions .button {
	cursor: pointer;
	line-height: 1.4em;
	text-align: center;
	margin-right: 8px;
	margin-left:-2px;
}

.confirmationPopup .button {
	font-size: 0.9em;
	padding: 2px;
}

#sidebarOptions .button {
	font-size: 0.7em;
	float: left;
	width: 80px;
	padding: 0px;
        color: #fff;
}

.confirmationPopup a.button,
#sidebarOptions a {
	border: none;
	margin: 0 0.2em;
	padding: 0.6em 0.25em;
	display: inline;
	color: #666;
}

.confirmationPopup a.button:hover,
#sidebarOptions a:hover {
	color: #000;
}

.confirmationPopup a.button:active,
#sidebarOptions a:active {
	border: solid 1px [[ColorPalette::PrimaryMid]];
	background-color: #fff;
	background: -webkit-gradient( linear, left bottom, left top, color-stop(0.1,rgb(200,200,200)), color-stop(1, rgb(100,100,100)));
	background: -moz-linear-gradient(center bottom , rgb(200,200,200) 10%,rgb(100,100,100) 100%) repeat scroll 0 0 transparent;
}
/* *** Sidebar *** */

#sidebar .wizard table {
	margin: 0px;
}

.tabContents .listTitle:first-child {
	margin-top: 0px;
}

#menuBar {
	background: [[ColorPalette::PrimaryLight]];
	left: 0;
	right: 0;
	position: relative;
	margin: 0;
	padding: 0.5em 0 0.5em 0;
	min-height: 1em;
	overflow: hidden;
	_width: 100%; /* for ie 6 */
}

#sidebarOptions a.button:hover {
	color: [[ColorPalette::PrimaryPale]];
    background: [[ColorPalette::PrimaryMid]];
}

#tiddlerDisplay, #searchResults {
	margin: 16px 448px 0 72px;
}

#sidebarTabs {
	position: absolute;
	right: 72px;
	width: 352px;
	top: 0;
}

#sidebarTabs .tabsetWrapper .tabset {
	width: 87px;
	border-top: 1px solid [[ColorPalette::PrimaryPale]];
	border-left: 1px solid [[ColorPalette::PrimaryPale]];
	border-bottom: 1px solid [[ColorPalette::PrimaryPale]];
	height: auto;
	float: left;
	word-wrap: break-word;
	top: 0;
	padding: 0;
}

#sidebarTabs .tabsetWrapper .tabContents {
	background-color: [[ColorPalette::PrimaryPale]];
	border: 3px solid [[ColorPalette::PrimaryMid]];
	width: 242px;
	_width: 238px;
	left: -3px;
	_left: -5px;
	position: relative;
	min-height: 34em;
	padding: 8px;
	font-size: 0.8em;
}

/* ---- Side style --- */

#sidebarTabs .tabsetWrapper .tabset .tab {
	font-size: 0.9em;
	padding: 0.7em 8px 0.5em;
	color: #fff;
	background: [[ColorPalette::PrimaryLight]];
	border: none;
	line-height: 16px;
	position: relative;
	display: block;
	margin: 0;
}

#sidebarTabs .tabsetWrapper .tabset .tabSelected {
	color: [[ColorPalette::PrimaryMid]];
	background: [[ColorPalette::PrimaryPale]];
	border-top: 3px solid [[ColorPalette::PrimaryMid]];
	border-bottom: 3px solid [[ColorPalette::PrimaryMid]];
	border-left: 3px solid [[ColorPalette::PrimaryMid]];
	z-index: 10;
	margin-top: -1px;
	font-weight: bold;
}

#sidebarTabs .tabContents li {
	border: none;
	margin-left: 0;
	word-wrap: break-word;
}

.tabContents .timeline {
	background: [[ColorPalette::PrimaryPale]];
	margin-bottom: 8px;
}

#sidebarTabs .timeline li.listTitle {
	color: #132E43;
	margin-left: 8px 0;
	padding: 0.3em 0.11em;
	font-size: 1em;
	border-bottom: none;
}

#sidebarTabs .tabContents li a {
	display: block;
	text-align: left;
	margin: 0 0 1px 0;
	padding: 0.3em 1em;
	background: [[ColorPalette::PrimaryPale]];
}

#sidebarTabs .tabsetWrapper .tabset a:hover,
#sidebarTabs .tabContents li a:hover {
	color: [[ColorPalette::PrimaryPale]];
	background: [[ColorPalette::PrimaryMid]];
}

/* Activity Stream */
#sidebarTabs .tabContents .activityStream .feedItem a {
	display: inline-block;
	padding: 0;
	background: none;
}

/* ---- Tagging box --- */
.tagInfo {
	border: 1px solid #cccccc;
	padding: 10px 15px;
	-moz-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);
	box-shadow: 0 2px 2px rgba(0,0,0,0.2);
	color: [[ColorPalette::TertiaryMid]];
	background: -moz-linear-gradient(100% 100% 90deg, #f4f4f4, #e5e5e5);
	background: -webkit-gradient(linear, left top, right top, from(#e5e5e5), to(#f4f4f4));
	margin-top: 1em;
	font-size: 13px;
	margin: 0 0 0 56px;
}

.tagInfo ul {
	list-style: none;
	padding-left: 2.2em;
}

.tagInfo ul li {
	display: inline;
}

.tagInfo ul li.listTitle,
.tagInfo .tagging ul li.listTitle {
	color: [[ColorPalette::PrimaryMid]];
	font-size: 13px;
}

.tagInfo ul li a {
	border: none;
}

.tagInfo .tagging ul li {
	float: none;
	display: inline-block;
}

.tagInfo .tagging {
	padding: 0;
}

.viewRevision .toolbar {
	right: 48px;
	top: 8px;
}

.viewRevision .modifierIcon img,
.viewRevision .modifierIcon svg {
	margin-right: 8px;
}

.viewRevision .toolbar svg {
	width: 32px;
	height: 32px;
}

/* --- IE hacks from lattice --- */

/* ie hacks */
* html #menuBar {
	margin-bottom: 8px;
}
.toolbar .svgIconText {
	*display: inline;
}

div.tiddler .toolbar a {
	cursor: pointer;
	float: left\9;
	display: inline\9;
}

* html .toolbar {
	right: 8px;
}
* html .followButton a {
	margin-top: 0px;
	margin-right: 8px;
}
* html #tiddlerDisplay {
	margin-top: 0px;
}

/* for printing purposes */
@media print {
	#mainMenu,
	#sidebar,
	#messageArea,
	.toolbar,
	.followPlaceHolder,
	#backstageButton,
	#backstageArea,
	#sidebarTabs,
	#sidebarSearch .txtOptionInput,
	#sidebarOptions {
		display: none !important;
	}
	#displayArea {
		margin: 1em 1em 0em;
	}
	noscript {
		display:none; /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
	}
	#tiddlerDisplay {
		margin: 16px 16px;
	}
}

@media all and (max-width: 960px){
	#tiddlerDisplay,
	#searchResults {
		margin: 16px 366px 0 16px;
	}

	#mainMenu {
		margin-left: 16px;
	}

	.headerForeground {
		margin-left: 16px;
	}

	#sidebarSearch {
		right: 16px;
	}

	#sidebarOptions {
		margin-right: 16px;
	}

	#sidebarTabs {
		right: 16px;
		width: 326px;
	}

	#sidebarTabs .tabsetWrapper .tabset {
		font-size: 0.9em;
		width: 77px;
	}

	#sidebarTabs .tabsetWrapper .tabContents {
		width: 226px;
		_width: 222px;
	}

	#sidebarTabs .tabContents li a {
		font-size: 0.9em;
	}
}
/*}}}*/
[[StyleSheetTiddler]]
[[StyleSheetCaspian]]
/*{{{*/
body {
	font-size: 1em;
	font-family: helvetica, arial, sans-serif;
	background-color: #fff;
	color: [[ColorPalette::Foreground]];
}

body ul { margin: 0; }

#popup {
	background-color: [[ColorPalette::TertiaryPale]];
}

#popup.confirmationPopup, .followList {
	font-size: 0.8em;
	padding: 1em;
	border: solid 1px [[ColorPalette::SecondaryMid]];
	background-color: [[ColorPalette::SecondaryPale]];
}

.followList .listTitle {
	text-decoration: underline;
}

#popup .followTiddlersList a {
	display: inline;
	padding: 0;
}

#popup li a {
	color: [[ColorPalette::PrimaryMid]];
	font-weight: bold;
}

#popup li a:hover {
	color: [[ColorPalette::PrimaryPale]];
	background: [[ColorPalette::PrimaryMid]];
}

#popup li.listTitle {
	border-bottom: 1px solid #000;
	font-weight: bold;
	margin-bottom: 10px;
}

#popup.followList {
	margin-left: 50px;
	margin-top: -30px;
}

.followTiddlersList .label {
	display: block;
	left: 10px;
	top: 0px;
	line-height: 16px;
	position: relative;
}

#popup .followTiddlersList .siteIcon{
	height: auto;
}

#popup .followTiddlersList li{
	clear: both;
	display: block;
	height: 48px;
	margin-bottom: 8px;
	position: relative;
}

#popup .followTiddlersList a{
	display: inline;
}

#displayArea {
	margin: 0;
	top: 0px;
	left: 0px;
	width: 100%;
	position: relative;
}

.revisionCloak {
	position: absolute;
	position: fixed !important;
	height: 100%;
	width: 100%;
	top: 0;
	left: 0;
	border: 0;
	margin: 0;
	padding: 0;
	opacity: 0.5;
	filter: alpha(opacity=50);
	background-color: #000;
}

/* *** Header *** */
.header {
	position: relative;
	background-color: [[ColorPalette::PrimaryMid]];
	_width: 100%; /* ie 6 demands */
}

.headerForeground {
	background-color: [[ColorPalette::PrimaryMid]];
	float: left;
	margin: 24px 16px 0px 72px;
	padding: 0;
	position: relative;
	top: 0;
	_width: 70%; /*ie6: needed for the background to actually be transparent*/
	_background-color: transparent; /*ie6: needed to show the search box*/
}

.clearFloat {
	clear: both;
}

#contentWrapper {
	position: relative;
	padding-top: 1px;
	top: -1px;
}

#tiddlerDisplay {
	_position: relative; /* ie 6*/
}

.siteTitle {
	clear: both;
	display: block;
	font-size: 32px;
	font-weight: bold;
	line-height: 32px;
}

.siteSubtitle {
	display: block;
	font-size: 14px;
	height: 16px;
	margin-bottom: 8px;
}

#sidebarSearch {
	padding: 0;
	position: absolute;
	right: 80px;
	top: 8px;
	width: 176px;
}

#sidebarSearch .txtOptionInput {
	width: 100%;
	margin-top: 5px;
	_color: #bbb; /* ie6 danger */
}

#sidebarSearch .txtOptionInput:focus {
	color: #000;
}

#sidebarSearch .searchButton {
	display: none;
}

/* *** Menu Bar *** */

#mainMenu {
	position: static;
	text-align: left;
	margin-left: 72px;
	float: left;
	width: auto;
	padding: 0;
	font-size: 1em;
	line-height: normal;
}

#mainMenu a {
	color: #fff;
	padding: 8px;
	font-size: 0.9em;
	margin-right: 16px;
}

#mainMenu a:hover {
	background-color: [[ColorPalette::PrimaryMid]];
	color: [[ColorPalette::Background]]
}

#sidebarOptions {
	margin-right: 72px;
	float: right;
	font-size: 1.1em;
	line-height: 1.6em;
	min-height: 1em;
	padding-top: 0;
}

#sidebarOptions a {
	margin-right: 8px;
}

.confirmationPopup .button,
#sidebarOptions .button {
	cursor: pointer;
	line-height: 1.4em;
	text-align: center;
	margin-right: 8px;
	margin-left:-2px;
}

.confirmationPopup .button {
	font-size: 0.9em;
	padding: 2px;
}

#sidebarOptions .button {
	font-size: 0.7em;
	float: left;
	width: 80px;
	padding: 0px;
        color: #fff;
}

.confirmationPopup a.button,
#sidebarOptions a {
	border: none;
	margin: 0 0.2em;
	padding: 0.6em 0.25em;
	display: inline;
	color: #666;
}

.confirmationPopup a.button:hover,
#sidebarOptions a:hover {
	color: #000;
}

.confirmationPopup a.button:active,
#sidebarOptions a:active {
	border: solid 1px [[ColorPalette::PrimaryMid]];
	background-color: #fff;
	background: -webkit-gradient( linear, left bottom, left top, color-stop(0.1,rgb(200,200,200)), color-stop(1, rgb(100,100,100)));
	background: -moz-linear-gradient(center bottom , rgb(200,200,200) 10%,rgb(100,100,100) 100%) repeat scroll 0 0 transparent;
}
/* *** Sidebar *** */

#sidebar .wizard table {
	margin: 0px;
}

.tabContents .listTitle:first-child {
	margin-top: 0px;
}

#menuBar {
	background: [[ColorPalette::PrimaryLight]];
	left: 0;
	right: 0;
	position: relative;
	margin: 0;
	padding: 0.5em 0 0.5em 0;
	min-height: 1em;
	overflow: hidden;
	_width: 100%; /* for ie 6 */
}

#sidebarOptions a.button:hover {
	color: [[ColorPalette::PrimaryPale]];
    background: [[ColorPalette::PrimaryMid]];
}

#tiddlerDisplay, #searchResults {
	margin: 16px 448px 0 72px;
}

#sidebarTabs {
	position: absolute;
	right: 72px;
	width: 352px;
	top: 0;
}

#sidebarTabs .tabsetWrapper .tabset {
	width: 87px;
	border-top: 1px solid [[ColorPalette::PrimaryPale]];
	border-left: 1px solid [[ColorPalette::PrimaryPale]];
	border-bottom: 1px solid [[ColorPalette::PrimaryPale]];
	height: auto;
	float: left;
	word-wrap: break-word;
	top: 0;
	padding: 0;
}

#sidebarTabs .tabsetWrapper .tabContents {
	background-color: [[ColorPalette::PrimaryPale]];
	border: 3px solid [[ColorPalette::PrimaryMid]];
	width: 242px;
	_width: 238px;
	left: -3px;
	_left: -5px;
	position: relative;
	min-height: 34em;
	padding: 8px;
	font-size: 0.8em;
}

/* ---- Side style --- */

#sidebarTabs .tabsetWrapper .tabset .tab {
	font-size: 0.9em;
	padding: 0.7em 8px 0.5em;
	color: #fff;
	background: [[ColorPalette::PrimaryLight]];
	border: none;
	line-height: 16px;
	position: relative;
	display: block;
	margin: 0;
}

#sidebarTabs .tabsetWrapper .tabset .tabSelected {
	color: [[ColorPalette::PrimaryMid]];
	background: [[ColorPalette::PrimaryPale]];
	border-top: 3px solid [[ColorPalette::PrimaryMid]];
	border-bottom: 3px solid [[ColorPalette::PrimaryMid]];
	border-left: 3px solid [[ColorPalette::PrimaryMid]];
	z-index: 10;
	margin-top: -1px;
	font-weight: bold;
}

#sidebarTabs .tabContents li {
	border: none;
	margin-left: 0;
	word-wrap: break-word;
}

.tabContents .timeline {
	background: [[ColorPalette::PrimaryPale]];
	margin-bottom: 8px;
}

#sidebarTabs .timeline li.listTitle {
	color: #132E43;
	margin-left: 8px 0;
	padding: 0.3em 0.11em;
	font-size: 1em;
	border-bottom: none;
}

#sidebarTabs .tabContents li a {
	display: block;
	text-align: left;
	margin: 0 0 1px 0;
	padding: 0.3em 1em;
	background: [[ColorPalette::PrimaryPale]];
}

#sidebarTabs .tabsetWrapper .tabset a:hover,
#sidebarTabs .tabContents li a:hover {
	color: [[ColorPalette::PrimaryPale]];
	background: [[ColorPalette::PrimaryMid]];
}

/* Activity Stream */
#sidebarTabs .tabContents .activityStream .feedItem a {
	display: inline-block;
	padding: 0;
	background: none;
}

/* ---- Tagging box --- */
.tagInfo {
	border: 1px solid #cccccc;
	padding: 10px 15px;
	-moz-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);
	box-shadow: 0 2px 2px rgba(0,0,0,0.2);
	color: [[ColorPalette::TertiaryMid]];
	background: -moz-linear-gradient(100% 100% 90deg, #f4f4f4, #e5e5e5);
	background: -webkit-gradient(linear, left top, right top, from(#e5e5e5), to(#f4f4f4));
	margin-top: 1em;
	font-size: 13px;
	margin: 0 0 0 56px;
}

.tagInfo ul {
	list-style: none;
	padding-left: 2.2em;
}

.tagInfo ul li {
	display: inline;
}

.tagInfo ul li.listTitle,
.tagInfo .tagging ul li.listTitle {
	color: [[ColorPalette::PrimaryMid]];
	font-size: 13px;
}

.tagInfo ul li a {
	border: none;
}

.tagInfo .tagging ul li {
	float: none;
	display: inline-block;
}

.tagInfo .tagging {
	padding: 0;
}

.viewRevision .toolbar {
	right: 48px;
	top: 8px;
}

.viewRevision .modifierIcon img,
.viewRevision .modifierIcon svg {
	margin-right: 8px;
}

.viewRevision .toolbar svg {
	width: 32px;
	height: 32px;
}

/* --- IE hacks from lattice --- */

/* ie hacks */
* html #menuBar {
	margin-bottom: 8px;
}
.toolbar .svgIconText {
	*display: inline;
}

div.tiddler .toolbar a {
	cursor: pointer;
	float: left\9;
	display: inline\9;
}

* html .toolbar {
	right: 8px;
}
* html .followButton a {
	margin-top: 0px;
	margin-right: 8px;
}
* html #tiddlerDisplay {
	margin-top: 0px;
}

/* for printing purposes */
@media print {
	#mainMenu,
	#sidebar,
	#messageArea,
	.toolbar,
	.followPlaceHolder,
	#backstageButton,
	#backstageArea,
	#sidebarTabs,
	#sidebarSearch .txtOptionInput,
	#sidebarOptions {
		display: none !important;
	}
	#displayArea {
		margin: 1em 1em 0em;
	}
	noscript {
		display:none; /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
	}
	#tiddlerDisplay {
		margin: 16px 16px;
	}
}

@media all and (max-width: 960px){
	#tiddlerDisplay,
	#searchResults {
		margin: 16px 366px 0 16px;
	}

	#mainMenu {
		margin-left: 16px;
	}

	.headerForeground {
		margin-left: 16px;
	}

	#sidebarSearch {
		right: 16px;
	}

	#sidebarOptions {
		margin-right: 16px;
	}

	#sidebarTabs {
		right: 16px;
		width: 326px;
	}

	#sidebarTabs .tabsetWrapper .tabset {
		font-size: 0.9em;
		width: 77px;
	}

	#sidebarTabs .tabsetWrapper .tabContents {
		width: 226px;
		_width: 222px;
	}

	#sidebarTabs .tabContents li a {
		font-size: 0.9em;
	}
}
/*}}}*/
[[StyleSheetTiddler]]
/***
|Name|SwitchThemePlugin|
|Source|http://www.TiddlyTools.com/#SwitchThemePlugin|
|Documentation|http://www.TiddlyTools.com/#SwitchThemePluginInfo|
|Version|5.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.3|
|Type|plugin|
|Description|Select alternative TiddlyWiki template/stylesheet 'themes' from a droplist|
!!!!!Documentation
>see [[SwitchThemePluginInfo]]
!!!!!Configuration
<<<
Current theme:<<switchTheme width:auto>>
<<option chkRandomTheme>> select a random theme at startup
//Note: to prevent a given theme from being chosen at random, tag it with <<tag excludeTheme>>//
<<<
!!!!!Installation Note
>As of 4/13/2008, a "core patch" function that provides backward-compatibility with TW2.3.x has been split into a separate tiddler, [[SwitchThemePluginPatch]], to reduce installation overhead for //this// plugin.  ''You should only install the patch tiddler when using this plugin in documents based on a core version prior to TW2.4.0''
!!!!!Revisions
<<<
2009.10.01 [5.4.1] changed 'noRandom' tag to 'excludeTheme' and recognize 'excludeLists' tag
| Please see [[SwitchThemePluginInfo]] for previous revision details |
2008.01.22 [5.0.0] Completely re-written and renamed from [[SelectStylesheetPlugin]] (now retired)
//history for retired SelectStylesheetPlugin omitted//
2005.07.20 [1.0.0] initial release (as SelectStylesheetPlugin)
<<<
!!!!!Code
***/
//{{{
version.extensions.SwitchThemePlugin= {major: 5, minor: 4, revision: 1, date: new Date(2009,10,1)};

config.macros.switchTheme = {
	handler: function(place,macroName,params) {
		setStylesheet(".switchTheme {width:100%;font-size:8pt;margin:0em}","switchThemePlugin");
		if (params[0] && (params[0].substr(0,6)=="width:"))	var width=(params.shift()).substr(6);
		if (params[0] && (params[0].substr(0,6)=="label:"))	var label=(params.shift()).substr(6);
		if (params[0] && (params[0].substr(0,7)=="prompt:"))	var prompt=(params.shift()).substr(7);
		if (params[0] && params[0].trim().length) // create a link that sets a specific theme
			createTiddlyButton(place,label?label:params[0],prompt?prompt:params[0],
				function(){ config.macros.switchTheme.set(params[0]); return false;});
		else { // create a select list of available themes
			var theList=createTiddlyElement(place,"select",null,"switchTheme",null);
			theList.size=1;
			if (width) theList.style.width=width;
			theList.onchange=function() { config.macros.switchTheme.set(this.value); return true; };
			this.refresh(theList);
		}
	},
	refresh: function(list) {
		var indent = String.fromCharCode(160)+String.fromCharCode(160);
		while(list.length > 0){list.options[0]=null;} // clear list
		list.options[list.length] = new Option("-vælg et tema-","",true,true);
		list.options[list.length] = new Option(indent+"[default]","StyleSheet");
		list.options[list.length] = new Option(indent+"[random]","*");
		var themes=store.getTaggedTiddlers("systemTheme");
		for (var i=0; i<themes.length; i++)
			if (themes[i].title!="StyleSheet" && !themes[i].isTagged('excludeLists'))
				list.options[list.length]=new Option(indent+themes[i].title,themes[i].title);
		// show current selection
		for (var t=0; t<list.options.length; t++)
			if (list.options[t].value==config.options.txtTheme)
				{ list.selectedIndex=t; break; }
	},
	set: function(theme) {
		if (!theme||!theme.trim().length) return;
		if (theme=="*") { // select a random theme (except themes with "excludeTheme")
			var curr=config.options.txtTheme;
			var themes=store.getTaggedTiddlers("systemTheme");
			if (!themes.length) return false;
			var which=Math.floor(Math.random()*themes.length);
			while (themes[which].title==curr
				||themes[which].tags.contains('excludeTheme','excludeLists'))
					which=Math.floor(Math.random()*themes.length);
			theme=themes[which].title;
		}
		// apply selected theme
		story.switchTheme(theme);
		// sync theme droplists
		var elems=document.getElementsByTagName("select");
		var lists=[]; for (var i=0; i<elems.length; i++)
			if (hasClass(elems[i],"switchTheme")) lists.push(elems[i]);
		for (var k=0; k<lists.length; k++)
			for (var t=0; t<lists[k].options.length; t++)
				if (lists[k].options[t].value==config.options.txtTheme)
					{ lists[k].selectedIndex=t; break; }
		return;
	}
}
//}}}
// // option to select a random theme at startup (if enabled)
//{{{
if (config.options.chkRandomTheme===undefined)
	config.options.chkRandomTheme=false;
if (config.options.chkRandomTheme)
	config.macros.switchTheme.set("*");
//}}}
// // hijack switchTheme to add Check/Init/Reset code handlers
//{{{
if (Story.prototype.switchTheme_saved===undefined) { // only once
Story.prototype.switchTheme_saved=Story.prototype.switchTheme;
Story.prototype.switchTheme=function(t){
	function run(t,s){
		var f=store.getTiddlerText(store.getTiddlerSlice(t,s));
		return f?eval('(function(){\n'+f+'\n})()'):false;
	}
	if (!startingUp && (run(config.options.txtTheme,'Reset')||run(t,'Check'))) return;
	this.switchTheme_saved.apply(this,arguments);
	run(t,'Init');
}
}
//}}}
|borderless|k
|>|''Der er fundet 7 tiddlere som matcher /{{{mineral}}}/''|Ver: <<version>> |
|>|>|<<search>> <<option chkSearchTitles>> Titler <<option chkSearchText>> Tekst <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |

|bgcolor:#4c4c4c;&nbsp;|bgcolor:#4c4c4c; ''Titler'' (Navne)|bgcolor:#4c4c4c; ''Størrelse'' |bgcolor:#4c4c4c; ''Tags'' |bgcolor:#4c4c4c; ''Ændret'' |h
| 1|[[MineralTheme]] |14700|systemTheme,mineral|2012.01.22|
| 2|[[Mineral]] |318|palette|2011.04.25|
| 3|[[zzConfig]] |686|systemConfig,excludeLists|2012.01.22|
| 4|[[ToolBox]] |242|mineral|2011.04.25|
| 5|[[TiddlerTweakerPlugin]] |21132|systemConfig,mineral|2011.04.25|
| 6|[[Lists]] |23|menu,mineral|2011.04.15|
| 7|[[BackstageSidebarPlugin]] |1023|systemConfig,mineral|2011.04.23|
|sortable|k
<<allTags excludeLists>>
<<timeline modified 15 "DD/MMM  - YYYY">>/%<<timeline "" 15>>%/
/***
|''Name:''|TableSortingPlugin|
|''Description:''|Dynamically sort tables by clicking on column headers|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TableSortingPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.02|
|''Date:''|25-01-2008|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
* Make sure your table has a header row
** {{{|Name|Phone Number|Address|h}}}<br> Note the /h/ that denote a header row 
* Give the table a class of 'sortable'
** {{{
|sortable|k
|Name|Phone Number|Address|h
}}}<br>Note the /k/ that denotes a class name being assigned to the table.
* To disallow sorting by a column, place {{{<<nosort>>}}} in it's header
* To automatically sort a table by a column, place {{{<<autosort>>}}} in the header for that column
** Or to sort automatically but in reverse order, use {{{<<autosort reverse>>}}}

!!Example:
|sortable|k
|Name |Salary |Extension |Performance |File Size |Start date |h
|ZBloggs, Fred |$12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |
|ABloggs, Fred |$12000.00 |1353 |1.2 |3350b |09/18/2003 |
|CBloggs, Fred |$12000 |1353 |1.200 |55.2Kb |August 18, 2003 |
|DBloggs, Fred |$12000.00 |1353 |1.2 |2100b |07/18/2003 |
|Bloggs, Fred |$12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |
|Turvey, Kevin |$191200.00 |2342 |-33 |1b |02/05/1979 |
|Mbogo, Arnold |$32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |
|Shakespeare, Bill |£122000.00|3211 |6 |33.22Gb |12/11/1961 |
|Shakespeare, Hamlet |£9000 |9005 |-8 |3Gb |01/01/2002 |
|Fitz, Marvin |€3300.30 |5554 |+5 |4Kb |05/22/1995 |

***/
// /%
//!BEGIN-PLUGIN-CODE
config.tableSorting = {
	
	darrow: "\u2193",
	
	uarrow: "\u2191",
	
	getText : function (o) {
		var p = o.cells[SORT_INDEX];
		return p.innerText || p.textContent || '';
	},
	
	sortTable : function (o,rev) {
		SORT_INDEX = o.getAttribute("index");
		var c = config.tableSorting;
		var T = findRelated(o.parentNode,"TABLE");
		if(T.tBodies[0].rows.length<=1) 
			return;
		var itm = "";
		var i = 0;
		while (itm == "" && i < T.tBodies[0].rows.length) {
			itm = c.getText(T.tBodies[0].rows[i]).trim();
			i++;
		}
		if (itm == "") 
			return; 	
		var r = [];
		var S = o.getElementsByTagName("span")[0];		
		c.fn = c.sortAlpha; 
		if(!isNaN(Date.parse(itm)))
			c.fn = c.sortDate; 
		else if(itm.match(/^[$|£|€|\+|\-]{0,1}\d*\.{0,1}\d+$/)) 
			c.fn = c.sortNumber; 
		else if(itm.match(/^\d*\.{0,1}\d+[K|M|G]{0,1}b$/)) 
			c.fn = c.sortFile; 
		for(i=0; i<T.tBodies[0].rows.length; i++) {
			 r[i]=T.tBodies[0].rows[i]; 
		} 
		r.sort(c.reSort);
		if(S.firstChild.nodeValue==c.darrow || rev) {
			r.reverse();
			S.firstChild.nodeValue=c.uarrow;
		} 
		else 
			S.firstChild.nodeValue=c.darrow;
		var thead = T.getElementsByTagName('thead')[0]; 
		var headers = thead.rows[thead.rows.length-1].cells;
		for(var k=0; k<headers.length; k++) {
			if(!hasClass(headers[k],"nosort"))
				addClass(headers[k].getElementsByTagName("span")[0],"hidden");
		}
		removeClass(S,"hidden");
		for(i=0; i<r.length; i++) { 
			T.tBodies[0].appendChild(r[i]);
			c.stripe(r[i],i);
			for(var j=0; j<r[i].cells.length;j++){
				removeClass(r[i].cells[j],"sortedCol");
			}
			addClass(r[i].cells[SORT_INDEX],"sortedCol");
		}
	},
	
	stripe : function (e,i){
		var cl = ["oddRow","evenRow"];
		i&1? cl.reverse() : cl;
		removeClass(e,cl[1]);
		addClass(e,cl[0]);
	},
	
	sortNumber : function(v) {
		var x = parseFloat(this.getText(v).replace(/[^0-9.-]/g,''));
		return isNaN(x)? 0: x;
	},
	
	sortDate : function(v) {
		return Date.parse(this.getText(v));
	},

	sortAlpha : function(v) {
		return this.getText(v).toLowerCase();
	},
	
	sortFile : function(v) { 		
		var j, q = config.messages.sizeTemplates, s = this.getText(v);
		for (var i=0; i<q.length; i++) {
			if ((j = s.toLowerCase().indexOf(q[i].template.replace("%0\u00a0","").toLowerCase())) != -1)
				return q[i].unit * s.substr(0,j);
		}
		return parseFloat(s);
	},
	
	reSort : function(a,b){
		var c = config.tableSorting;
		var aa = c.fn(a);
		var bb = c.fn(b);
		return ((aa==bb)? 0 : ((aa<bb)? -1:1));
	}
};

Story.prototype.tSort_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force,customFields,defaultText){
	var elem = this.tSort_refreshTiddler.apply(this,arguments);
	if(elem){
		var tables = elem.getElementsByTagName("TABLE");
		var c = config.tableSorting;
		for(var i=0; i<tables.length; i++){
			if(hasClass(tables[i],"sortable")){
				var x = null, rev, table = tables[i], thead = table.getElementsByTagName('thead')[0], headers = thead.rows[thead.rows.length-1].cells;
				for (var j=0; j<headers.length; j++){
					var h = headers[j];
					if (hasClass(h,"nosort"))
						continue;
					h.setAttribute("index",j);
					h.onclick = function(){c.sortTable(this); return false;};
					h.ondblclick = stopEvent;
					if(h.getElementsByTagName("span").length == 0)
						createTiddlyElement(h,"span",null,"hidden",c.uarrow); 
					if(!x && hasClass(h,"autosort")) {
						x = j;
						rev = hasClass(h,"reverse");
					}
				}
				if(x)
					c.sortTable(headers[x],rev);		
			}
		}
	}
	return elem; 
};

setStylesheet("table.sortable span.hidden {visibility:hidden;}\n"+
	"table.sortable thead {cursor:pointer;}\n"+
	"table.sortable .nosort {cursor:default;}\n"+
	"table.sortable td.sortedCol {background:#ffc;}","TableSortingPluginStyles");

function stopEvent(e){
	var ev = e? e : window.event;
	ev.cancelBubble = true;
	if (ev.stopPropagation) ev.stopPropagation();
	return false;	
}	

config.macros.nosort={
	handler : function(place){
		addClass(place,"nosort");
	}	
};

config.macros.autosort={
	handler : function(place,m,p,w,pS){
		addClass(place,"autosort"+" "+pS);		
	}	
};
//!END-PLUGIN-CODE
// %/
/***
|''Name''|TiddlerPopupPlugin|
|''Description''|Allows you to create links to tiddlers causing them to open in a popup|
|''Author''|Jon Robson|
|''Version''|0.5.3|
|''Status''|@@beta@@|
|''Source''|http://svn.tiddlywiki.org/Trunk/contributors/JonRobson/plugins/TiddlerPopup/TiddlerPopupPlugin.js|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
!Usage
{{{<<TiddlerPopUp GettingStarted popup>>}}} creates a button with text popup which when clicked loads the GettingStarted tiddler.
!Code
***/
//{{{
(function($){
config.macros.TiddlerPopUp = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler){
		var args = paramString.parseParams("anon")[0];
		params = args.anon;
		var title = args.title ? args.title[0] : params[0];
		var label = args.label ? args.label[0] : params[1] || "popup";
		var autoposition = args.autoposition && args.autoposition[0] == "no" ? false : true;
		var classNames = args.className || [];

		$("<a class='button popupLink' />").text(label).
			click(function(ev) {
				var target = ev.target;
				var active = $(target).data("popupActive");
				if(!active) {
					var popup = Popup.create(target);
					$(target).data("popupActive", true);
					$(popup).addClass(classNames.join(" "));
					var text = store.getTiddlerText(title) || config.shadowTiddlers[title];
					wikify(text, popup);
					Popup.show();
					if(!autoposition) {
						$(popup).css({ left: "auto", top: "auto" });
					}
					$(popup).click(function(ev) { // make it so only clicking on the document outside the popup removes the popup
						if(ev.target.parentNode != document) {
							ev.stopPropagation();
						}
					});
					ev.stopPropagation();
				} else {
					Popup.remove();
					$(target).data("popupActive", false);
				}
				return false;
			}).appendTo(place);
	}
};
})(jQuery);
//}}}
/***
|Name|TiddlerTweakerPlugin|
|Source|http://www.TiddlyTools.com/#TiddlerTweakerPlugin|
|Version|2.4.5|
|Author|Eric Shulman|
|Translator|Måns Mårtensson|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|select multiple tiddlers and modify author, created, modified and/or tag values|
~TiddlerTweaker is a 'power tool' for TiddlyWiki authors.  Select multiple tiddlers from a listbox and 'bulk modify' the creator, author, created, modified and/or tag values of those tiddlers using a compact set of form fields.  The values you enter into the fields simultaneously overwrite the existing values in all tiddlers you have selected.
!!!!!Usage
<<<
{{{<<tiddlerTweaker>>}}}
{{smallform{<<tiddlerTweaker>>}}}
By default, any tags you enter into the TiddlerTweaker will //replace// the existing tags in all the tiddlers you have selected.  However, you can also use TiddlerTweaker to quickly filter specified tags from the selected tiddlers, while leaving any other tags assigned to those tiddlers unchanged:
>Any tag preceded by a '+' (plus) or '-' (minus), will be added or removed from the existing tags //instead of replacing the entire tag definition// of each tiddler (e.g., enter '-excludeLists' to remove that tag from all selected tiddlers.  When using this syntax, care should be taken to ensure that //every// tag is preceded by '+' or '-', to avoid inadvertently overwriting any other existing tags on the selected tiddlers.  (note: the '+' or '-' prefix on each tag value is NOT part of the tag value, and is only used by TiddlerTweaker to control how that tag value is processed)
Important Notes:
* TiddlerTweaker is a 'power user' tool that can make changes to many tiddlers at once.  ''You should always have a recent backup of your document (or 'save changes' just *before* tweaking the tiddlers), just in case you accidentally 'shoot yourself in the foot'.''
* The date and author information on any tiddlers you tweak will ONLY be updated if the corresponding checkboxes have been selected.  As a general rule, after using TiddlerTweaker, always ''//remember to save your document//'' when you are done, even though the tiddler timeline tab may not show any recently modified tiddlers.
* Selecting and updating all tiddlers in a document can take a while.  Your browser may warn about an 'unresponsive script'.  Usually, if you allow it to continue, it should complete the processing... eventually.  Nonetheless, be sure to save your work before you begin tweaking lots of tiddlers, just in case something does get stuck.
<<<
!!!!!Revisions
<<<
2011.01.21 2.4.5 auto-selection: use "-" for untagged tiddlers.  Also, added 'opened', 'invert'
2009.09.15 2.4.4 added 'edit' button. moved html definition to separate section
2009.09.13 2.4.3 in settiddlers(), convert backslashed chars (\n\b\s\t) in replacement text
2009.06.26 2.4.2 only add brackets around tags containing spaces
2009.06.22 2.4.1 in setFields(), add brackets around all tags shown tweaker edit field
2009.03.30 2.4.0 added 'sort by modifier'
2009.01.22 2.3.0 added support for text pattern find/replace
2008.10.27 2.2.3 in setTiddlers(), fixed Safari bug by replacing static Array.concat(...) with new Array().concat(...)
2008.09.07 2.2.2 added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.12 2.2.1 replace built-in backstage tweak task with tiddler tweaker control panel (moved from BackstageTweaks)
2008.01.13 2.2.0 added 'auto-selection' links: all, changed, tags, title, text
2007.12.26 2.1.0 added support for managing 'creator' custom field (see [[CoreTweaks]])
2007.11.01 2.0.3 added config.options.txtTweakerSortBy for cookie-based persistence of list display order preference setting.
2007.09.28 2.0.2 in settiddlers() and deltiddlers(), added suspend/resume notification handling (improves performance when operating on multiple tiddlers)
2007.08.03 2.0.1 added shadow definition for [[TiddlerTweaker]] tiddler for use as parameter references with {{{<<tiddler>>, <<slider>> or <<tabs>>}}} macros.
2007.08.03 2.0.0 converted from inline script
2006.01.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TiddlerTweakerPlugin= {major: 2, minor: 4, revision: 5, date: new Date(2011,1,21)};

// shadow tiddler
config.shadowTiddlers.TiddlerTweaker='<<tiddlerTweaker>>';

// defaults
if (config.options.txtTweakerSortBy==undefined) config.options.txtTweakerSortBy='modified';

// backstage task
if (config.tasks) { // for TW2.2b3 or above
	config.tasks.tweak.tooltip='review/modify tiddler internals: dates, authors, tags, etc.';
	config.tasks.tweak.content='{{smallform small groupbox{<<tiddlerTweaker>>}}}';
}

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.macros.tiddlerTweaker = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var span=createTiddlyElement(place,'span');
		span.innerHTML=store.getTiddlerText('TiddlerTweakerPlugin##html');
		this.init(span.getElementsByTagName('form')[0],config.options.txtTweakerSortBy);
	},
	init: function(f,sortby) { // set form controls
		if (!f) return; // form might not be rendered yet...
		while (f.list.options[0]) f.list.options[0]=null; // empty the list
		var tids=store.getTiddlers(sortby);
		if (sortby=='size') // descending order
			tids.sort(function(a,b) {return a.text.length > b.text.length ? -1 : (a.text.length == b.text.length ? 0 : +1);});
		var who='';
		for (i=0; i<tids.length; i++) { var t=tids[i];
			var label=t.title; var value=t.title;
			switch (sortby) {
				case 'modified':
				case 'created':
					var t=tids[tids.length-i-1]; // reverse order
					var when=t[sortby].formatString('YY.0MM.0DD 0hh:0mm ');
					label=when+t.title;
					value=t.title;
					break;
				case 'size':
					label='['+t.text.length+'] '+label;
					break;
				case 'modifier':
				case 'creator':
					if (who!=t[sortby]) {
						who=t[sortby];
						f.list.options[f.list.length]=new Option('by '+who+':','',false,false);
					}
					label='\xa0\xa0\xa0'+label; // indent
					break;
			}
			f.list.options[f.list.length]=new Option(label,value,false,false);
		}
		f.title.value=f.who.value=f.creator.value=f.tags.value='';
		f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
		f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
		f.stats.disabled=f.set.disabled=f.del.disabled=f.edit.disabled=f.display.disabled=true;
		f.settitle.disabled=false;
		config.options.txtTweakerSortBy=sortby;
		f.sortby.value=sortby; // sync droplist
		if (sortby!='modified') saveOptionCookie('txtTweakerSortBy');
		else removeCookie('txtTweakerSortBy');
	},
	enablefields: function(here) { // enables/disables inputs based on #items selected
		var f=here.form; var list=f.list;
		var c=0; for (i=0;i<list.length;i++) if (list.options[i].selected) c++;
		if (c>1) f.title.disabled=true;
		if (c>1) f.settitle.checked=false;
		f.set.disabled=(c==0);
		f.del.disabled=(c==0);
		f.edit.disabled=(c==0);
		f.display.disabled=(c==0);
		f.settitle.disabled=(c>1);
		f.stats.disabled=(c==0);
		var msg=(c==0)?'vælg tiddlere':(c+' tiddler'+(c!=1?'e':'')+' valgt');
		here.previousSibling.firstChild.firstChild.nextSibling.innerHTML=msg;
		if (c) clearMessage(); else displayMessage('ingen tiddlere er valgt');
	},
	setfields: function(here) { // set fields from first selected tiddler
		var f=here.form;
		if (!here.value.length) {
			f.title.value=f.who.value=f.creator.value=f.tags.value='';
			f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
			f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
			return;
		}
		var tid=store.getTiddler(here.value); if (!tid) return;
		f.title.value=tid.title;
		f.who.value=tid.modifier;
		f.creator.value=tid.fields['creator']||''; // custom field - might not exist
		f.tags.value=tid.tags.map(function(t){return String.encodeTiddlyLink(t)}).join(' ');
		var c=tid.created; var m=tid.modified;
		f.cm.value=c.getMonth()+1;
		f.cd.value=c.getDate();
		f.cy.value=c.getFullYear();
		f.ch.value=c.getHours();
		f.cn.value=c.getMinutes();
		f.mm.value=m.getMonth()+1;
		f.md.value=m.getDate();
		f.my.value=m.getFullYear();
		f.mh.value=m.getHours();
		f.mn.value=m.getMinutes();
	},
	selecttiddlers: function(here,callback) {
		var f=here; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
		for (var t=f.list.options.length-1; t>=0; t--)
			f.list.options[t].selected=callback(f.list.options[t]);
		config.macros.tiddlerTweaker.enablefields(f.list);
		return false;
	},
	settiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		var cdate=new Date(f.cy.value,f.cm.value-1,f.cd.value,f.ch.value,f.cn.value);
		var mdate=new Date(f.my.value,f.mm.value-1,f.md.value,f.mh.value,f.mn.value);
		if (tids.length>1 && !confirm('Are you sure you want to update these tiddlers:\n\n'+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			var title=!f.settitle.checked?tid.title:f.title.value;
			var who=!f.setwho.checked?tid.modifier:f.who.value;
			var text=tid.text;
			if (f.replacetext.checked) {
				var r=f.replacement.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
				text=text.replace(new RegExp(f.pattern.value,'mg'),r);
			}				
			var tags=tid.tags;
			if (f.settags.checked) { 
				var intags=f.tags.value.readBracketedList();
				var addtags=[]; var deltags=[]; var reptags=[];
				for (i=0;i<intags.length;i++) {
					if (intags[i].substr(0,1)=='+')
						addtags.push(intags[i].substr(1));
					else if (intags[i].substr(0,1)=='-')
						deltags.push(intags[i].substr(1));
					else
						reptags.push(intags[i]);
				}
				if (reptags.length)
					tags=reptags;
				if (addtags.length)
					tags=new Array().concat(tags,addtags);
				if (deltags.length)
					for (i=0;i<deltags.length;i++)
						{ var pos=tags.indexOf(deltags[i]); if (pos!=-1) tags.splice(pos,1); }
			}
			if (!f.setcdate.checked) cdate=tid.created;
			if (!f.setmdate.checked) mdate=tid.modified;
			store.saveTiddler(tid.title,title,text,who,mdate,tags,tid.fields);
			if (f.setcreator.checked) store.setValue(tid.title,'creator',f.creator.value); // set creator
			if (f.setcdate.checked) tid.assign(null,null,null,null,null,cdate); // set create date
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	displaytiddlers: function(here,edit) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		story.displayTiddlers(story.findContainingTiddler(f),tids,edit?DEFAULT_EDIT_TEMPLATE:null);
	},
	deltiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		if (!confirm('Are you sure you want to delete these tiddlers:\n\n'+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			if (tid.tags.contains('systemConfig')) {
				var msg=tid.title+' is tagged with systemConfig.'
					+'\n\nRemoving this tiddler may cause unexpected results.  Are you sure?';
				if (!confirm(msg)) continue;
			}
			store.removeTiddler(tid.title);
			story.closeTiddler(tid.title);
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	stats: function(here) {
		var f=here.form; var list=f.list; var tids=[]; var out=''; var tot=0;
		var target=f.nextSibling;
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			out+='[['+tid.title+']] '+tid.text.length+'\n'; tot+=tid.text.length;
		}
		var avg=tot/tids.length;
		out=tot+' bytes i '+tids.length+' valgte tiddlere ('+avg+' bytes/tiddler)\n<<<\n'+out+'<<<\n';
		removeChildren(target);
		target.innerHTML="<hr><font size=-2><a href='javascript:;' style='float:right' "
			+"onclick='this.parentNode.parentNode.style.display=\"none\"'>close</a></font>";
		wikify(out,target);
		target.style.display='block';
	}
};
//}}}
/***
//{{{
!html
<style>
.tiddlerTweaker table,
.tiddlerTweaker table tr,
.tiddlerTweaker table td
	{ padding:0;margin:0;border:0;white-space:nowrap; }
</style><form class='tiddlerTweaker'><!--
--><table style="width:100%"><tr valign="top"><!--
--><td style="text-align:center;width:99%;"><!--
	--><font size=-2><div style="text-align:left;"><span style="float:right"><!--
	-->&nbsp; <a href="javascript:;" 
		title="vælg alle tiddlere"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return opt.value.length;
		});">alle</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="vælg tiddlere der er åbne i historiekolonnen"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return story.getTiddler(opt.value);
		});">åbne</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="vælg tiddlere der er nye/ændrede siden sidste lagring"
		onclick="var lastmod=new Date(document.lastModified);
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tid=store.getTiddler(opt.value);
				return tid&&tid.modified>lastmod;
			});
		">ændret</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="vælg tiddlere med mindst et matchende tag"
		onclick="var t=prompt('Skriv mellemrumsseparerede tags (match et eller flere).  Brug \x22-\x22 for at matche ikke-taggede tiddlere');
			if (!t||!t.length) return false;
			var tags=t.readBracketedList();
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tid=store.getTiddler(opt.value);
				return tid&&tags[0]=='-'?!tid.tags.length:tid.tags.containsAny(tags);
			});
		">tags</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="vælg tiddlere hvis titler indeholder matchende tekst"
		onclick="var t=prompt('Skriv en titel (eller en del af en titel) der skal matches');
			if (!t||!t.length) return false;
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				return opt.value.indexOf(t)!=-1;
			});
		">titler</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="vælg tiddlere der indeholder matchende tekst"
		onclick="var t=prompt('Skriv tiddler tekst (indhold) der skal matche');
			if (!t||!t.length) return false;
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tt=store.getTiddlerText(opt.value,'');
				return tt.indexOf(t)!=-1;
			});
		">tekst</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="omvend udvalget af alle listeelementer"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return !opt.selected;
		});">omvend</a><!--
	--></span><span>vælg tiddlere</span><!--
	--></div><!--
	--></font><select multiple name=list size="11" style="width:99.99%" 
		title="brug klik, shift-klik og/eller ctrl-klik for at vælge flere tiddler titler" 
		onclick="config.macros.tiddlerTweaker.enablefields(this)" 
		onchange="config.macros.tiddlerTweaker.setfields(this)"><!--
	--></select><br><!--
	-->vis <input type=text size=1 value="11" 
		onchange="this.form.list.size=this.value; this.form.list.multiple=(this.value>1);"><!--
	--> efter <!--
	--><select name=sortby size=1 
		onchange="config.macros.tiddlerTweaker.init(this.form,this.value)"><!--
	--><option value="title">titel</option><!--
	--><option value="size">størrelse</option><!--
	--><option value="modified">ændret</option><!--
	--><option value="created">lavet</option><!--
	--><option value="modifier">redaktør</option><!--
	--></select><!--
	--><input type="button" value="genopfrisk" 
		onclick="config.macros.tiddlerTweaker.init(this.form,this.form.sortby.value)"<!--
	--> <input type="button" name="stats" disabled value="totaler..." 
		onclick="config.macros.tiddlerTweaker.stats(this)"><!--
--></td><td style="width:1%"><!--
	--><div style="text-align:left"><font size=-2>&nbsp;skift værdier</font></div><!--
	--><table style="width:100%;"><tr><!--
	--><td style="padding:1px"><!--
		--><input type=checkbox name=settitle unchecked 
			title="tillad ændring af tiddler titel (omdøb tiddler)" 
			onclick="this.form.title.disabled=!this.checked">titel<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=title size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setcreator unchecked 
			title="tillad ændring af tiddler forfatter" 
			onclick="this.form.creator.disabled=!this.checked">lavet af<!--
	--></td><td style="padding:1px;"><!--
		--><input type=text name=creator size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setwho unchecked 
			title="tillad ændring af tiddler redaktør" 
			onclick="this.form.who.disabled=!this.checked">ændret af<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=who size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setcdate unchecked 
			title="tillad ændring af oprettelsesdato" 
			onclick="var f=this.form;
				f.cm.disabled=f.cd.disabled=f.cy.disabled=f.ch.disabled=f.cn.disabled=!this.checked"><!--
		-->lavet den<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=cm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=cd size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=cy size=4 style="width:3em;padding:0;text-align:center" disabled><!--
		--> kl <input type=text name=ch size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> : <input type=text name=cn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setmdate unchecked 
			title="tillad ændring af dato for ændring" 
			onclick="var f=this.form;
				f.mm.disabled=f.md.disabled=f.my.disabled=f.mh.disabled=f.mn.disabled=!this.checked"><!--
		-->ændret den<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=mm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=md size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=my size=4 style="width:3em;padding:0;text-align:center" disabled><!--
		--> kl <input type=text name=mh size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> : <input type=text name=mn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=replacetext unchecked
			title="find/erstat matchende tekst" 
			onclick="this.form.pattern.disabled=this.form.replacement.disabled=!this.checked">erstat tekst<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=pattern size=15 value="" style="width:40%" disabled 
			title="skriv TEKST MØNSTER (regulært udtryk)"> med <!--
		--><input type=text name=replacement size=15 value="" style="width:40%" disabled 
			title="skriv ERSTATNINGSTEKST"><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=settags checked 
			title="tillad ændring af tiddler tags" 
			onclick="this.form.tags.disabled=!this.checked">tags<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=tags size=35 value="" style="width:98%" 
			title="skriv nye tags eller brug '+tag' og '-tag' for at tilføje/fjerne tags fra allerede eksisterende tags"><!--
	--></td></tr></table><!--
	--><div style="text-align:center"><!--
	--><nobr><input type=button name=display disabled style="width:24%" value="vis" 
		title="vis valgte tiddlere"
		onclick="config.macros.tiddlerTweaker.displaytiddlers(this,false)"><!--
	--> <input type=button name=edit disabled style="width:23%" value="redigér" 
		title="redigér valgte tiddlere"
		onclick="config.macros.tiddlerTweaker.displaytiddlers(this,true)"><!--
	--> <input type=button name=del disabled style="width:24%" value="slet" 
		title="fjern valgte tiddlere"
		onclick="config.macros.tiddlerTweaker.deltiddlers(this)"><!--
	--> <input type=button name=set disabled style="width:24%" value="opdatér" 
		title="opdatér valgte tiddlere"
		onclick="config.macros.tiddlerTweaker.settiddlers(this)"></nobr><!--
	--></div><!--
--></td></tr></table><!--
--></form><span style="display:none"><!--content replaced by tiddler "stats"--></span>
!end
//}}}
***/
 
/***
|''Name''|TiddlySpaceToolbar|
|''Description''|augments tiddler toolbar commands with SVG icons|
|''Author''|Osmosoft|
|''Version''|0.6.6|
|''Status''|@@beta@@|
|''Source''|http://github.com/TiddlySpace/tiddlyspace/raw/master/src/plugins/TiddlySpaceToolbar.js|
|''CodeRepository''|http://github.com/TiddlySpace/tiddlyspace|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
|''CoreVersion''|2.5.0|
|''Requires''|ImageMacroPlugin|
|''Keywords''|toolbar icons SVG|
!Description
replaces tiddler toolbar commands with SVG icons if available
!Notes
requires [[ImageMacroPlugin|http://svn.tiddlywiki.org/Trunk/contributors/JonRobson/plugins/ImageMacroPlugin/plugins/ImageMacroPlugin.tid]]

SVG icons are drawn from tiddlers titled {{{<command>.svg}}}
In readonly mode a tiddler called {{{<command>ReadOnly.svg}}} will be used if it exists.
!TODO
* rename (IconToolbarPlugin?)
* support more than one more popup menu in the toolbar.
!Code
***/
//{{{
(function($) {

if(!config.macros.image) {
	throw "Missing dependency: ImageMacroPlugin";
}

var macro = config.macros.toolbar;

macro.icons = {
	cloneTiddler: "editTiddler"
};

var _handler = macro.handler;
macro.handler = function(place, macroName, params, wikifier,
		paramString, tiddler) {
	var toolbar = $(place);
	toolbar.attr({
		refresh: "macro",
		macroName: macroName
	}).data("args", arguments);
	var status = _handler.apply(this, arguments);
	if(tiddler.isReadOnly()) {
		toolbar.addClass("toolbarReadOnly");
	} else {
		toolbar.removeClass("toolbarReadOnly");
	}
	var parsedParams = paramString.parseParams("name")[0];
	if(parsedParams.icons && parsedParams.icons == "yes") {
		this.augmentCommandButtons(place);
	}
	if(parsedParams.more && parsedParams.more == "popup") {
		// note we must override the onclick event like in createTiddlyButton
		// otherwise the click event is the popup AND the slider
		$(".moreCommand", place).each(function(i, el) {
			el.onclick = macro.onClickMorePopUp;
		});
		// buttons that are after a less command should not be in more menu.
		$(".lessCommand ~ .button", place).appendTo(place);
		$(".lessCommand", place).remove();
	}
	return status;
};

macro.refresh = function(place, params) {
	var args = $(place).empty().data("args");
	this.handler.apply(this, args);
};

var imageMacro = config.macros.image;
macro.augmentCommandButtons = function(toolbar) {
	$(".button", toolbar).each(function(i, el) {
		var cmd = $(el).attr("commandname");
		cmd = cmd ? cmd : "moreCommand"; // XXX: special-casing of moreCommand due to ticket #1234
		var icon = store.tiddlerExists(cmd) ? cmd : macro.icons[cmd];
		var text = $(el).text();
		if(readOnly) {
			var readOnlyAlternative = "%0ReadOnly".format([icon]);
			if(store.tiddlerExists(readOnlyAlternative)) {
				icon = readOnlyAlternative;
			}
		}
		if(store.tiddlerExists(icon)) {
			$(el).css({display: "inline-block"}).empty();
			imageMacro.renderImage(el, icon, { alt: text });
		}
	});
};

// provide onClickMore to provide extra commands in a popup
macro.onClickMorePopUp = function(ev) {
	ev = ev || window.event;
	var sibling = this.nextSibling;
	if(sibling) {
		var commands = sibling.childNodes;
		var popup = Popup.create(this);
		$(popup).addClass("taggedTiddlerList");
		for(var i = 0; i < commands.length; i++) {
			var li = createTiddlyElement(popup, "li", null);
			var oldCommand = commands[i];
			var command = oldCommand.cloneNode(true);
			command.onclick = oldCommand.onclick;
			li.appendChild(command);
		}
		Popup.show();
	}
	ev.cancelBubble = true;
	if(ev.stopPropagation) {
		ev.stopPropagation();
	}
	return false;
};

})(jQuery);
//}}}
/***
|''Name''|TiddlyWikiListPlugin|
|''Description''|A more powerful generic version of TiddlyWiki's timeline and list macros|
|''Author''|Jon Robson|
|''Version''|0.6.0|
!Usage
{{{<<list filter [tag[foo]] template:Bar emptyMessage:"No tiddlers to list">>}}}
{{{<<timeline filter:[tag[foo]]>>}}} only show those tiddlers tagged foo in the timeline.
{{{<<timeline template:Foo>>}}}  use a template tiddler Foo to render each item in the timeline. For example Foo might contain
{{{
<<view title link>>
}}}
***/
//{{{
(function($) {
var macro = config.macros.timeline;
merge(macro, {
	handler: function(place,macroName,params, wikifier, paramString, tiddler) {
		var container = $("<div />").attr("params", paramString).
			attr("macroName", macroName).appendTo(place)[0];
		macro.refresh(container);
	},
	refresh: function(container) {
		$(container).attr("refresh", "macro").empty();
		var paramString = $(container).attr("params");
		var args = paramString.parseParams("anon", null, null)[0];
		var params = args.anon || [];

		var field = params[0] || "modified";
		var dateFormat = params[2] || this.dateFormat;
		var groupTemplate = macro.groupTemplate.format(field, dateFormat);
		groupTemplate = args.groupTemplate ? store.getTiddlerText(args.groupTemplate[0]) || groupTemplate :
			groupTemplate;

		var itemTemplate = macro.itemTemplate;
		itemTemplate = args.template ? store.getTiddlerText(args.template[0]) || itemTemplate :
			itemTemplate;

		var tiddlers = args.filter ? store.sortTiddlers(store.filterTiddlers(args.filter[0]), field) :
			store.reverseLookup("tags", "excludeLists", false, field);
		var lastGroup = "";
		var last = params[1] ? tiddlers.length-Math.min(tiddlers.length,parseInt(params[1])) : 0;
		for(var t=tiddlers.length-1; t>=last; t--) {
			var tiddler = tiddlers[t];
			var theGroup = wikifyPlainText(groupTemplate,0,tiddler);
			if(theGroup != lastGroup) {
				var ul = document.createElement("ul");
				addClass(ul,"timeline");
				container.appendChild(ul);
				createTiddlyElement(ul,"li",null,"listTitle",theGroup);
				lastGroup = theGroup;
			}
			var item = createTiddlyElement(ul,"li",null,"listLink");
			wikify(itemTemplate,item,null,tiddler);
		}
	},
	groupTemplate: "<<view %0 date '%1'>>",
	itemTemplate: "<<view title link>>"
});

config.macros.newtimeline = config.macros.timeline;
config.macros.list.template = "<<view title link>>";
config.macros.list.handler = function(place,macroName,params,wikifier,paramString)
{
	var args = paramString.parseParams("anon", null, null)[0];
	var type = args.anon ? args.anon[0] : "all";
	var template = args.template ? store.getTiddlerText(args.template[0]) : false;
	if(!template) {
		template = config.macros.list.template;
	}
	var list = document.createElement("ul");
	place.appendChild(list);
	if(this[type].prompt)
		createTiddlyElement(list,"li",null,"listTitle",this[type].prompt);
	var results;
	if(this[type].handler)
		results = this[type].handler(params);
	for(var t = 0; t < results.length; t++) {
		var li = document.createElement("li");
		list.appendChild(li);
		var tiddler = results[t];
		if(typeof(tiddler) == 'string') { // deal with missing etc..
				tiddler = store.getTiddler(tiddler) || new Tiddler(tiddler);
		}
		wikify(template, li, null, tiddler);
	}
	if(results.length === 0 && args.emptyMessage) {
		$(list).addClass("emptyList");
		$("<li />").text(args.emptyMessage[0]).appendTo(list);
	}
};

config.macros.list.filter.handler = function(params)
{
	var filter = params[1];
	var results = [];
	if(filter) {
		var tiddlers = store.filterTiddlers(filter);
		for(var t=0; t<tiddlers.length; t++)
			results.push(tiddlers[t]);
	}
	return results;
};

})(jQuery);
//}}}
<br><<tiddlerTweaker>><br><<tiddler EditBar>> <br><<switchTheme width:auto>>{{smallform{<<selectPalette>>}}}{{tiny{<<RandomColorPaletteButton>>}}} ⇐ [[Ny palet|ColorPalette]]<<tiddler [[Dialog ;-)]]>>+++[Tspot]...<<tiddler TspotControls>>===
|~ViewToolbar|tagSearch +editTiddler > closeOthers fields syncing permalink references jump < closeTiddler |
|~ViewToolbarReadOnly|closeTiddler > closeOthers permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
/***
|Name|TwHelpSearchPlugin_da|
|Source|http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin|
|Documentation|http://twhelp.tiddlyspot.com/#TWHelpSearchDoc|
|Version|1.0.8|
|Author|Morris Gray|
|Modder/translator|Måns Mårtensson|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.0 - 2.4|
|Type|plugin|
|Requires|[[SearchOptionsPlugin_da|http://www.TiddlyTools.com/#SearchOptionsPlugin]] [[TableSortingPlugin|http://tw.lewcid.org/#TableSortingPlugin]] (only for sorting option)|
|Overrides|SearchOptionsPlugin's search results|
|Description|Extends the search results from SearchOptionsPlugin to a sortable table showing title, size and tags.|
 ''Demo search:''
|>|>|>|<<search 'Søg...'>> |
|>|>| søg efter i |>|>|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titler |  tekst  | tags | hold |

''A Plugin Tweak for:'' SearchOptionsPlugin
!!!!!Description
<<<
This plugin defines an alternative format for the SearchResults tiddler that is generated by the SearchOptionsPlugin . It presents the search results in tabular form numbering the rows; and showing the tiddler title, the size in bytes, and the tags.  It is ready to be used with the [[TableSortingPlugin|http://tw.lewcid.org/#TableSortingPlugin]] (check versions) so any column can be sorted; such as size in ascending or descending order.
<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your ~TiddlyWiki:
* http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin
*SearchOptionsPlugin from http://www.tiddlytools.com/#SearchOptionsPlugin
* Get more documentation here [[TWHelpSearchDoc]] or here:
* http://twhelp.tiddlyspot.com/#TwHelpSearchDoc
<<<
!!!!!Revision History
<<<
''2009.02.18  [1.0.8]'' 
Added modified column.
''2009.02.18  [1.0.7]'' 
Removed text coloring of headers re: conflict with TableSortingPlugin refresh.
''2008.09.14  [1.0.6]'' 
Cosmetic - Add header.
''2007.09.12  [1.0.6]''
Added overflow scroll to TWHelp-SearchResults for long titles or tags.
''2006.02.03  [1.0.5]''
Added facility for holding the results of multiple searches with tick box on dashboard.
''2006.02.02  [1.0.4]''
Added several options, cleaned up design.Planning one version basic and one with added options this is the added options version.
''2006.01.27  [1.0.3''
Added a column for the size of the text in each tiddler, this does not include the size of the title or tags.  Added overall TW statistics button requires TiddlerStatsPlugin.
''2006.01.23 [1.0.2 ]''
''a)''Changed function reportSearchResults(text,matches) to  window.reportSearchResults=function(text,matches)
''b)''Added a line so that Incremental Search is automatically disabled config.options.chkSearchIncremental=false; turn off key-by-key searching
''c)''Removed space inside parens. bgcolor(#fe8 )" to "bgcolor(#fe8)".  This
is what was causing IE to 'crap out' halfway through drawing the table
headings.
''d)''Added {{{config.options.chkSearchList=true;}}}
''2006.01.20 [1.0.1]''
ELS: reportSearchResults() definition moved to this Plugin Tweak tiddler and removed extranous code
''2006.01.19 [1.0.0]''
This is an adaptation of Eric Shulman's SearchOptionsPlugin. Adapted by MorrisGray to provide search results in table form. All the necessary controls for refining the search is provided within the table including slide-down access to AdvancedOptions.
<<<
!!!!!Code
***/

//{{{
if (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;
if (config.options.chkRegExpSearch==undefined) config.options.chkRegExpSearch=true;
if (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=false;
if (config.options.chkSearchText==undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags==undefined) config.options.chkSearchTags=false;
if (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=true;
if (config.options.chkSearchList==undefined) config.options.chkSearchList=true;
if (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=false;
if (config.options.chkToggleLinks==true) config.options.chkToggleLinks=false;
if (config.options.chkHoldSearches==undefined) config.options.chkHoldSearches=false;
if (config.options.chkSortTags==undefined) config.options.chkSortTags=false;

config.options.chkToggleLinks=false;
config.options.chkSinglePageMode=false;
config.options.chkHoldSearches=false;
config.options.chkSearchIncremental=false;
config.options.chkHttpReadOnly = false;
config.options.chkRegExpSearch=true;
config.options.chkSearchList=true;
config.options.chkToggleLinks=false;

config.shadowTiddlers.AdvancedOptions += "\n<<option chkHoldSearches>> Gem søgeresultater midlertidigt";


//}}}

//{{{

// Give the report a custom name
config.macros.search.reportTitle="SøgeResultater";

// Override default SearchOptionsPlugin formatting for SearchResults tiddler
window.reportSearchResults=function(text,matches)

{
  
        var title=config.macros.search.reportTitle
	config.macros.search.reportTitle;
      	var q = config.options.chkRegExpSearch ? "/" : "'";
        if (!config.options.chkHoldSearches)  body=""; 
      
body+="\n|borderless|k\n|>|''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''|Ver: <<version>> "+"|"+"\n";
        body+="|>|>|<<search>> <<option chkSearchTitles>> Titler <<option chkSearchText>> Tekst <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |"+"\n";
 
        body+="\n|bgcolor:#4c4c4c;&nbsp;|bgcolor:#4c4c4c; ''Titler'' (Navne)|bgcolor:#4c4c4c; ''Størrelse'' |bgcolor:#4c4c4c; ''Tags'' |bgcolor:#4c4c4c; ''Ændret'' |h";
	for(var t=0;t<matches.length;t++) 
        body+="\n"+"| "+(t+1)+"|[["+matches[t].title+"]] |"+matches[t].text.length+"|"+matches[t].tags+"|"+matches[t].modified.formatString('YYYY.0MM.0DD')+"|";
         body+="\n|sortable|k";
         body+="\n";

	// create/update the tiddler
	var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
	tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch killbookmark");
	store.addTiddler(tiddler); story.closeTiddler(title);

	// render tiddler
	var oldprompt=config.macros.search.label;
	config.macros.search.label="søg igen"; // use alternate "search again" label
        story.displayTiddler(null,title,1); // force refresh
	config.macros.search.label=oldprompt;	// restore standard search label
}

//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 22/01/2012 17:36:55 | DitNavn | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup |
| 22/01/2012 17:39:19 | DitNavn | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup |
| 22/01/2012 17:43:19 | DitNavn | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup |
| 22/01/2012 17:45:41 | DitNavn | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup |
| 22/01/2012 17:47:03 | DitNavn | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup |
| 09/02/2012 00:48:23 | mama | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup | ok |
| 09/02/2012 00:57:08 | mama | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup |
| 09/02/2012 13:38:34 | mama | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup |
| 14/02/2012 21:48:10 | mama | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup |
| 14/02/2012 21:55:20 | mama | [[/|http://xn--mns-ula.dk/Ulteo/]] | [[store.php|http://xn--mns-ula.dk/Ulteo/store.php]] | . | [[index.html | http://xn--mns-ula.dk/Ulteo/index.html]] | backup |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.4|
|''Date:''|2008-08-11|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 4,
	date: new Date("2008-08-11"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
	
//
// Upload Macro
//

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
};
	
config.macros.upload.label = {
	promptOption: "Gem og Upload denne TiddlyWiki med UploadMuligheder",
	promptParamMacro: "Gem og upload denne TiddlyWiki i %0",
	saveLabel: "gem til nettet", 
	saveToDisk: "gem til disk",
	uploadLabel: "upload"	
};

config.macros.upload.messages = {
	noStoreUrl: "Ingen gemme URL i parametre eller muligheder",
	usernameOrPasswordMissing: "Brugernavn eller password mangler"
};

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
		return;
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
	else
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};

config.macros.upload.action = function(params)
{
		// for missing macro parameter set value from options
		if (!params) params = {};
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			alert(config.macros.upload.messages.noStoreUrl);
			clearMessage();
			return false;
		}
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			alert(config.macros.upload.messages.usernameOrPasswordMissing);
			clearMessage();
			return false;
		}
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 
};

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
{
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;
};

//
// uploadOptions Macro
//

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		wizard.createWizard(place,this.wizardTitle);
		wizard.addStep(this.step1Title,this.step1Html);
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		markList.parentNode.insertBefore(listWrapper,markList);
		wizard.setValue("listWrapper",listWrapper);
		this.refreshOptions(listWrapper,false);
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
		else
			uploadCaption = config.macros.upload.label.uploadLabel;
		
		wizard.setButtons([
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
				
			]);
	},
	options: [
		"txtUploadUserName",
		"pasUploadPassword",
		"txtUploadStoreUrl",
		"txtUploadDir",
		"txtUploadFilename",
		"txtUploadBackupDir",
		"chkUploadLog",
		"txtUploadLogMaxLine"		
	],
	refreshOptions: function(listWrapper) {
		var opts = [];
		for(i=0; i<this.options.length; i++) {
			var opt = {};
			opts.push();
			opt.option = "";
			n = this.options[i];
			opt.name = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
			opts.push(opt);
		}
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
				h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
			}
		}
		
	},
	onCancel: function(e)
	{
		backstage.switchTab(null);
		return false;
	},
	
	wizardTitle: "Upload med muligheder",
	step1Title: "Disse muligheder gemmes som cookies i din browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Fortryd",
	cancelButtonPrompt: "Fortryd prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Beskrivelse", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Mulighed", type: 'String'},
			{name: 'Name', field: 'name', title: "Navn", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
};

//
// upload functions
//

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "Den originale '%0' lader ikke til at være en rigtig TiddlyWiki",
	backupSaved: "Backup gemt",
	backupFailed: "Det muslykkedes at uploade en backup fil",
	rssSaved: "RSS feed er uploadet",
	rssFailed: "Det mislykkedes at uploade en RSS feed fil",
	emptySaved: "Tom skabelon er uploadet",
	emptyFailed: "Det mislykkedes at uploade en tom skabelon fil",
	mainSaved: "Hoved TiddlyWiki filen er uploadet",
	mainFailed: "Det mislykkedes at uploade Hoved TiddlyWiki filen. Dine ændringer er ikke blevet gemt",
	//specific upload
	loadOriginalHttpPostError: "Kan ikke finde den originale fil",
	aboutToSaveOnHttpPost: 'Er i gang med at uploade på %0 ...',
	storePhpNotFound: "Store scriptet '%0' blev ikke fundet."
};

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
			displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
			return;
		}
		if (bidix.debugMode) 
			alert(original.substr(0,500)+"\n...");
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
			alert(config.messages.invalidFileError.format([localPath]));
			return;
		}
		bidix.upload.uploadRss(uploadParams,original,posDiv);
	};
	
	if(onlyIfDirty && !store.isDirty())
		return;
	clearMessage();
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
		saveChanges();
	}
	// get original
	var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);			
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		var rssString = generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) != "file")
			rssString = convertUnicodeToUTF8(rssString);	
		bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
				displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
			}
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
			store.setDirty(false);
			log.endUpload("ok");
		} else {
			alert(bidix.upload.messages.mainFailed);
			displayMessage(bidix.upload.messages.mainFailed);
			log.endUpload("failed");			
		}
	};
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);
	bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == 404)
			alert(bidix.upload.messages.storePhpNotFound.format([url]));
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			alert(responseText);
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
			alert(responseText);
		if (responseText.charAt(0) != '0')
			status = null;
		callback(status,params,responseText,url,xhr);
	};
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
		alert(config.messages.invalidFileError.format([localPath]));
		return;
	}
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
				original.substr(posDiv[1]);
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;
};

//
// UploadLog
// 
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
		store.addTiddler(this.tiddler);
	}
	return this;
};

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
		return;
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			textArray.splice(1,textArray.length-1-maxLine);
			this.tiddler.text = textArray.join('\n');		
	}
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	store.addTiddler(this.tiddler);
	// refresh and notifiy for immediate update
	story.refreshTiddler(this.tiddler.title);
	store.notify(this.tiddler.title, true);
};

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
		return;
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";
	this.addText(text);
};

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
		return;
	this.addText(" "+status+" |");
};

//
// Utilities
// 

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
	}
};

bidix.dirname = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};

bidix.basename = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

//
// Initializations
//

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});

// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');


// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Skift UploadMuligheder og Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");


//}}}

/***
|''Name:''|UploadTiddlerPlugin|
|''Description:''|Upload a tiddler and Update a remote TiddlyWiki |
|''Version:''|1.2.2|
|''Date:''|2008-09-13|
|''Source:''|http://tiddlywiki.bidix.info/#UploadTiddlerPlugin|
|''Usage:''|Uses {{{<<uploadOptions>>}}}<br>with those UploadTiddler Options : <br>chkUploadTiddler: <<option chkUploadTiddler>><br>txtUploadTiddlerStoreUrl: <<option txtUploadTiddlerStoreUrl>><br>chkUploadTiddlerFromFile: <<option chkUploadTiddlerFromFile>>|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''[[License]]:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''CoreVersion:''|2.3.0|
***/
//{{{
version.extensions.UploadTiddlerPlugin = {
	major: 1, minor: 2, revision: 2,
	date: new Date("2008-09-13"),
	source: 'http://tiddlywiki.bidix.info/#UploadTiddlerPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.3.0'
};

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;
bidix.uploadTiddler = {
	messages: {
		aboutToSaveTiddler: "About to update tiddler '%0'...",
		aboutToRemotelySaveTiddler: "About to REMOTELY update tiddler '%0'...",
		storeTiddlerNotFound: "Script store tiddler '%0' not found",
		tiddlerSaved: "Tiddler '%0' updated in '%1'"
	},
	upload: function(title,tiddler,oldTitle) {
		var done = function(data, textStatus, jqXHR) {
			var responseText = data.join("");
			if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
				alert("2"+responseText);
				if (responseText.indexOf("Debug mode") >= 0 )
					responseText = responseText.substring(responseText.indexOf("\n\n")+2);
			       } else if (responseText.charAt(0) != '0')
				     alert("3"+responseText);
			else {
				var filename = (config.options['txtUploadFilename']?config.options['txtUploadFilename']:'index.html');
				displayMessage(bidix.uploadTiddler.messages.tiddlerSaved.format([title, filename]));
			}
			store.setDirty(false);
		};

		var failed = function(jqXHR, textStatus) {
			if(textStatus == 'timeout') {
				alert(bidix.uploadTiddler.messages.storeTiddlerNotFound.format([storeScript]));
			}
		};

		if ((config.options['chkUploadTiddler']) &&
				((document.location.toString().substr(0,4) == "http") || config.options['chkUploadTiddlerFromFile'])) {
			clearMessage();
			if (document.location.toString().substr(0,4) != "http")
				displayMessage(bidix.uploadTiddler.messages.aboutToRemotelySaveTiddler.format([title]));
			else
				displayMessage(bidix.uploadTiddler.messages.aboutToSaveTiddler.format([title]));
			var ExtTiddler = null;
			var html = null;
			if (tiddler) {
				ExtTiddler = store.getSaver().externalizeTiddler(store,tiddler);
				html = wikifyStatic(tiddler.text,null,tiddler).htmlEncode();
			}
			var form = "title="+encodeURIComponent(title);
			form = form + "&tiddler="+(ExtTiddler?encodeURIComponent(ExtTiddler):'');
			form = form + "&html="+(html?encodeURIComponent(html):'');
			var filename = (config.options['txtUploadFilename']?config.options['txtUploadFilename']:'index.html');
			form = form +"&oldTitle="+encodeURIComponent(oldTitle);
			form = form +"&fileName="+encodeURIComponent(filename);
			form = form +"&backupDir="+encodeURIComponent(config.options['txtUploadBackupDir']);
			form = form +"&user="+encodeURIComponent(config.options['txtUploadUserName']);
			form = form +"&password="+encodeURIComponent(config.options['pasUploadPassword']);
			form = form +"&uploadir="+encodeURIComponent(config.options['txtUploadDir']);
			form = form +"&debug="+encodeURIComponent(0);
			var storeScript = (config.options.txtUploadTiddlerStoreUrl
								? config.options.txtUploadTiddlerStoreUrl : 'storeTiddler.php');

			jQuery.ajax({
				url: storeScript ,
				dataType: 'jsonp',
				data: form,
				timeout: 15000,
				success: done,
				complete: failed,
				username: config.options['txtUploadUserName'],
				password: config.options['pasUploadPassword']
 			});
		}
	}
}
TiddlyWiki.prototype.saveTiddler_bidix = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(oldTitle,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
	var tiddler = TiddlyWiki.prototype.saveTiddler_bidix.apply(this,arguments);
	var title = (newTitle?newTitle:oldTitle);
	if (oldTitle == title)
		oldTitle = '';
	bidix.uploadTiddler.upload(title, tiddler, oldTitle);
}
TiddlyWiki.prototype.removeTiddler_bidix =TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler = function(title) {
	TiddlyWiki.prototype.removeTiddler_bidix.apply(this,arguments);
	bidix.uploadTiddler.upload(title, null);
}

//
// Initializations
//

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

// styleSheet
setStylesheet('.txtUploadTiddlerStoreUrl {width: 22em;}',"uploadTiddlerPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadTiddlerStoreUrl: "Url of the UploadTiddlerService script (default: storeTiddler.php)",
	chkUploadTiddler: "Do per Tiddler upload using txtUploadTiddlerStoreUrl (default: false)",
	chkUploadTiddlerFromFile: "Upload tiddler even if TiddlyWiki is located on local file (default: false)"
});

// Options Initializations
bidix.initOption('txtUploadTiddlerStoreUrl','');
bidix.initOption('chkUploadTiddler','');
bidix.initOption('chkUploadTiddlerFromFile','');


// add options in backstage UploadOptions
if (config.macros.uploadOptions) {
	if (config.macros.uploadOptions.options) {
		config.macros.uploadOptions.options.push("txtUploadTiddlerStoreUrl","chkUploadTiddler", "chkUploadTiddlerFromFile");
	}
}

//}}}
Download:
*[[installation_Iso.pdf|./Installation_Iso.pdf]]
*[[Support_Ubuntu_Lucid.pdf|./Support_Ubuntu_Lucid.pdf]]
*[[ulteo-ovd-3.0.0~rc8.iso|./ulteo-ovd-3.0.0~rc8.iso]]
*@@background:yellow;OPDATERING 8/2 2012[[[ulteo-ovd-3.0.0|http://www.ulteo.com/home/en/ovdi/openvirtualdesktop/3.0]] - [[download|./ulteo-ovd-3.0.0.0.iso]]@@
NB.: ulteo-ovd-3.0.0~rc8.iso er en "release candidate" til en kommende ver. 3, men burde alligevel være "produktionsklar"...

kilde: http://ulteo.com

<html><div align="center"><iframe src="http://www.ulteo.com/home/en/ovdi/openvirtualdesktop/featuresOVDv3#screenshots" frameborder="0" style="width:100%;height:40em"></iframe></div></html>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]] more:popup'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
/*{{{*/
Background: #eae2f2
Foreground: #140c1c
PrimaryPale: #a886ca
PrimaryLight: #7f4db1
PrimaryMid: #563478
PrimaryDark: #040306
SecondaryPale: #88ca86
SecondaryLight: #50b14d
SecondaryMid: #367834
SecondaryDark: #030603
TertiaryPale: #c7ca86
TertiaryLight: #adb14d
TertiaryMid: #767834
TertiaryDark: #060603
Error: #f88
ColorPaletteParameters: HSL([270|28], [0.3915569740347564],[0.01957194902934134|0.6590866206679493])
/*}}}*/
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg2" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="29pt" width="29pt" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="13 43 29 29" xmlns:dc="http://purl.org/dc/elements/1.1/">
 <metadata id="metadata34">
  <rdf:RDF>
   <cc:Work rdf:about="">
    <dc:format>image/svg+xml</dc:format>
    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
    <dc:title/>
   </cc:Work>
  </rdf:RDF>
 </metadata>
 <defs id="defs6">
  <title id="title26">Layer 1</title>
  <title id="title22">Canvas 1</title>
  <filter id="filter3630">
   <feGaussianBlur id="feGaussianBlur3632" stdDeviation="0.625"/>
  </filter>
 <linearGradient id="linearGradient001" y2="27.646" gradientUnits="userSpaceOnUse" x2="-45.8" y1="27.646" x1="-57.66">
   <stop id="stop1" stop-color="#ffffff" offset="0"/>
   <stop id="stop2" stop-color="#ffa0a0" offset="0.66462"/>
   <stop id="stop3" stop-color="#ffffff" offset="1"/>
  </linearGradient></defs>
 <rect id="iconBG" style="stroke-dasharray:none;" stroke-width="1.2" fill-rule="evenodd" ry="4.1663" transform="matrix(0, -1, 1, 0, 0, 0)" width="25" stroke="#696969" stroke-linecap="round" stroke-miterlimit="4" y="15.167" x="-70.116" height="25" fill="none"/>
 <rect id="iconFG" style="stroke-dasharray:none;" stroke-width="1.6" fill-rule="evenodd" ry="2.3755" transform="matrix(0, -1, 1, 0, 0, 0)" width="22" stroke="#e6e6e6" stroke-linecap="round" stroke-miterlimit="4" y="16.646" x="-68.6" height="22" fill="url(#linearGradient001)" opacity="0"/>
 <g id="iconSymbol" stroke-linejoin="miter" stroke="#4d4d4d">
  <path id="path3288" style="stroke-dasharray:none;" d="m31.328,58.508a1.2868,1.2868,0,1,1,-1.1862,1.1643" transform="matrix(4.67791, 0, 0, 4.67791, -119.332, -222.038)" stroke-linecap="round" stroke-miterlimit="4" stroke-width="0.342033" fill="none"/>
  <path id="path4348" d="m20.433,50.322,4.3207,0-1.3291,1.3291,6.1802,6.4735-1.687,1.687-6.3268-6.3268-1.158,1.158,0-4.3207z" stroke-linecap="butt" stroke-width="0.80000001px" fill="#4d4d4d"/>
 </g>
 <rect id="overlay" style="stroke-dasharray:none;" transform="matrix(0, -1, 1, 0, -32, 0)" fill-rule="evenodd" ry="4.1663" height="25" filter="url(#filter3630)" width="25" stroke="#00F" stroke-linecap="round" stroke-miterlimit="4" y="47.167" x="-70.116" stroke-width="1.2" fill="#ACF" class="overlayOnHover" opacity="0"/>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg2" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="29pt" width="29pt" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="13 43 29 29" xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata id="metadata34">
 <rdf:RDF>
  <cc:Work rdf:about="">
  <dc:format>image/svg+xml</dc:format>
  <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
  <dc:title/>
  </cc:Work>
 </rdf:RDF>
</metadata>
 <defs id="defs6">
  <title id="title26">Layer 1</title>
  <title id="title22">Canvas 1</title>
  <filter id="filter001">
   <feGaussianBlur id="feGaussianBlur3632" stdDeviation="0.625"/>
  </filter>
 <linearGradient id="linearGradient001" y2="27.646" gradientUnits="userSpaceOnUse" x2="-45.8" y1="27.646" x1="-57.66">
   <stop id="stop1" stop-color="#ffffff" offset="0"/>
   <stop id="stop2" stop-color="#ffa0a0" offset="0.66462"/>
   <stop id="stop3" stop-color="#ffffff" offset="1"/>
  </linearGradient></defs>
 <rect id="iconBG" style="stroke-dasharray:none;" stroke-width="1.2" fill-rule="evenodd" ry="4.1663" transform="matrix(0, -1, 1, 0, 0, 0)" width="25" stroke="#696969" stroke-linecap="round" stroke-miterlimit="4" y="15.167" x="-70.116" height="25" fill="none"/>
 <rect id="iconFG" style="stroke-dasharray:none;" stroke-width="1.6" fill-rule="evenodd" ry="2.3755" transform="matrix(0, -1, 1, 0, 0, 0)" width="22" stroke="#e6e6e6" stroke-linecap="round" stroke-miterlimit="4" y="16.646" x="-68.6" height="22" fill="url(#linearGradient001)" opacity="0"/>
 <g id="iconSymbol" stroke-linejoin="miter" style="stroke-dasharray:none;" transform="matrix(0.579556, -0.579556, 0.579556, 0.579556, -4.21894, 26.7647)" stroke="#4d4d4d" stroke-width="3.19999981" fill="#4d4d4d">
<path id="path3219" style="stroke-dasharray:none;" d="M-7.3399,53.9h16.353"/>
<path id="path3221" style="stroke-dasharray:none;" d="M0.8368,62.077v-16.354"/>
</g>
 <rect id="overlay" style="stroke-dasharray:none;" transform="matrix(0, -1, 1, 0, -32, 0)" fill-rule="evenodd" ry="4.1663" height="25" filter="url(#filter001)" width="25" stroke="#F00" stroke-linecap="round" stroke-miterlimit="4" y="47.167" x="-70.116" stroke-width="2" fill="#ffd5d5" class="overlayOnHover" opacity="0"/>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg2" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="29pt" width="29pt" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="13 43 29 29" xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata id="metadata34">
 <rdf:RDF>
  <cc:Work rdf:about="">
  <dc:format>image/svg+xml</dc:format>
  <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
  <dc:title/>
  </cc:Work>
 </rdf:RDF>
</metadata>
 <defs id="defs6">
  <title id="title26">Layer 1</title>
  <title id="title22">Canvas 1</title>
  <filter id="filter001">
   <feGaussianBlur id="feGaussianBlur3632" stdDeviation="0.625"/>
  </filter>
 <linearGradient id="linearGradient001" y2="27.646" gradientUnits="userSpaceOnUse" x2="-45.8" y1="27.646" x1="-57.66">
   <stop id="stop1" stop-color="#ffffff" offset="0"/>
   <stop id="stop2" stop-color="#ffa0a0" offset="0.66462"/>
   <stop id="stop3" stop-color="#ffffff" offset="1"/>
  </linearGradient></defs>
 <rect id="iconBG" style="stroke-dasharray:none;" stroke-width="1.2" fill-rule="evenodd" ry="4.1663" transform="matrix(0, -1, 1, 0, 0, 0)" width="25" stroke="#696969" stroke-linecap="round" stroke-miterlimit="4" y="15.167" x="-70.116" height="25" fill="none"/>
 <rect id="iconFG" style="stroke-dasharray:none;" stroke-width="1.6" fill-rule="evenodd" ry="2.3755" transform="matrix(0, -1, 1, 0, 0, 0)" width="22" stroke="#e6e6e6" stroke-linecap="round" stroke-miterlimit="4" y="16.646" x="-68.6" height="22" fill="url(#linearGradient001)" opacity="0"/>
 <g id="iconSymbol" stroke-linejoin="miter" style="stroke-dasharray:none;" transform="translate(0.0627706, -0.0627706)" stroke="#4d4d4d" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="1.60000002" fill="none">
   <path id="path2874" style="stroke-dasharray:none;" d="m21.748,51.452,1.7934,14.247,7.9706,0,2.4908-15.144-12.255,0.89669z"/>
   <path id="path2880" style="stroke-dasharray:none;" d="m25.435,51.452,0.84687,14.048"/>
   <path id="path2882" style="stroke-dasharray:none;" d="M30.068,51.104,28.573,65.351"/>
  </g>
 <rect id="overlay" style="stroke-dasharray:none;" transform="matrix(0, -1, 1, 0, -32, 0)" fill-rule="evenodd" ry="4.1663" height="25" filter="url(#filter001)" width="25" stroke="#F00" stroke-linecap="round" stroke-miterlimit="4" y="47.167" x="-70.116" stroke-width="2" fill="#ffd5d5" class="overlayOnHover" opacity="0"/>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg2" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="29pt" width="29pt" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="13 43 29 29" xmlns:dc="http://purl.org/dc/elements/1.1/">
 <metadata id="metadata34">
  <rdf:RDF>
   <cc:Work rdf:about="">
    <dc:format>image/svg+xml</dc:format>
    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
    <dc:title/>
   </cc:Work>
  </rdf:RDF>
 </metadata>
 <defs id="defs6">
  <title id="title26">Layer 1</title>
  <title id="title22">Canvas 1</title>
  <filter id="filter001">
   <feGaussianBlur id="feGaussianBlur3632" stdDeviation="0.625"/>
  </filter>
 <linearGradient id="linearGradient001" y2="27.646" gradientUnits="userSpaceOnUse" x2="-45.8" y1="27.646" x1="-57.66">
   <stop id="stop1" stop-color="#ffffff" offset="0"/>
   <stop id="stop2" stop-color="#ffa0a0" offset="0.66462"/>
   <stop id="stop3" stop-color="#ffffff" offset="1"/>
  </linearGradient></defs>
 <rect id="iconBG" style="stroke-dasharray:none;" stroke-width="1.2" fill-rule="evenodd" ry="4.1663" transform="matrix(0, -1, 1, 0, 0, 0)" width="25" stroke="#696969" stroke-linecap="round" stroke-miterlimit="4" y="15.167" x="-70.116" height="25" fill="none"/>
 <rect id="iconFG" style="stroke-dasharray:none;" stroke-width="1.6" fill-rule="evenodd" ry="2.3755" transform="matrix(0, -1, 1, 0, 0, 0)" width="22" stroke="#e6e6e6" stroke-linecap="round" stroke-miterlimit="4" y="16.646" x="-68.6" height="22" fill="url(#linearGradient001)" opacity="0"/>
 <g id="iconSymbol" stroke="#4d4d4d" stroke-miterlimit="4" fill="none">
  <path id="path3640" stroke-linejoin="round" style="stroke-dasharray:none;" d="m33.165,50.126-10.258,9.3293-2.0113,4.3956,4.2474-2.1224,9.8299-9.5985-1.8075-2.004z" stroke-linecap="butt" stroke-width="1.60000002"/>
  <path id="path3642" stroke-linejoin="miter" style="stroke-dasharray:none;" d="m13.981,27.04,12.705,0" transform="matrix(0.8, 0, 0, 0.8, 13, 43)" stroke-linecap="round" stroke-width="2"/>
 </g>
 <rect id="overlay" style="stroke-dasharray:none;" transform="matrix(0, -1, 1, 0, -32, 0)" fill-rule="evenodd" ry="4.1663" height="25" filter="url(#filter001)" width="25" stroke="#008000" stroke-linecap="round" stroke-miterlimit="4" y="47.167" x="-70.116" stroke-width="1.2" fill="#AFA" class="overlayOnHover" opacity="0"/>
</svg>
|sortable widetable|k
| <<tiddler RefreshTiddler with: genopfrisk>> |c
| Spørgsmål | Svar |h
|<<editSection [[##Spørgsmål]] "redigér Spørgsmål">><<tiddler [[##Spørgsmål]]>>|<<editSection [[##Svar]] "redigér Svar">><<editSection [[##Link]] "redigér">><<tiddler [[##Link]] with:{{store.getValue(tiddler,"link")}}>><<tiddler [[##Svar]]>>|
|>|<<editSection [[##Notat]] "redigér">>Notat:<<tiddler [[##Notat]]>>|
/%
!Spørgsmål

!Svar

!Notat

!Link
[[Link »|$1]]
!end %/
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg2" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="29pt" width="29pt" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="13 43 29 29" xmlns:dc="http://purl.org/dc/elements/1.1/">
 <metadata id="metadata34">
  <rdf:RDF>
   <cc:Work rdf:about="">
    <dc:format>image/svg+xml</dc:format>
    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
    <dc:title/>
   </cc:Work>
  </rdf:RDF>
 </metadata>
 <defs id="defs6">
  <title id="title26">Layer 1</title>
  <title id="title22">Canvas 1</title>
  <filter id="filter3630">
   <feGaussianBlur id="feGaussianBlur3632" stdDeviation="0.625"/>
  </filter>
 <linearGradient id="linearGradient001" y2="27.646" gradientUnits="userSpaceOnUse" x2="-45.8" y1="27.646" x1="-57.66">
   <stop id="stop1" stop-color="#ffffff" offset="0"/>
   <stop id="stop2" stop-color="#ffa0a0" offset="0.66462"/>
   <stop id="stop3" stop-color="#ffffff" offset="1"/>
  </linearGradient></defs>
 <rect id="iconBG" style="stroke-dasharray:none;" stroke-width="1.2" fill-rule="evenodd" ry="4.1663" transform="matrix(0, -1, 1, 0, 0, 0)" width="25" stroke="#696969" stroke-linecap="round" stroke-miterlimit="4" y="15.167" x="-70.116" height="25" fill="none"/>
 <rect id="iconFG" style="stroke-dasharray:none;" stroke-width="1.6" fill-rule="evenodd" ry="2.3755" transform="matrix(0, -1, 1, 0, 0, 0)" width="22" stroke="#e6e6e6" stroke-linecap="round" stroke-miterlimit="4" y="16.646" x="-68.6" height="22" fill="url(#linearGradient001)" opacity="0"/>
 <g id="iconSymbol" stroke-linejoin="miter" stroke-linecap="butt">
   <g id="g3250" style="stroke-dasharray:none;" transform="matrix(0.68969, -0.68969, 0.68969, 0.68969, -10.2106, 20.8697)" stroke="#4d4d4d" fill="#4d4d4d">
    <path id="path3252" style="stroke-dasharray:none;" d="m-7.3399,53.9,16.353,0" stroke-width="3.6909102"/>
    <path id="path3254" style="stroke-dasharray:none;" d="m0.8368,62.077,0-16.353" stroke-width="3.28080907"/>
   </g>
   <g id="g3282" style="stroke-dasharray:none;" transform="matrix(0, -0.975369, 0.975369, 0, -24.9937, 58.5463)" stroke="#4d4d4d" stroke-width="3.69091022" fill="#4d4d4d">
    <path id="path3284" style="stroke-dasharray:none;" d="m-7.3399,53.9,16.353,0"/>
    <path id="path3286" style="stroke-dasharray:none;" d="m0.8368,62.077,0-16.353"/>
   </g>
   <path id="path3648" style="stroke-dasharray:none;" d="m-8.9375,22.031a1.2188,1.2188,0,1,1,-2.4375,0,1.2188,1.2188,0,1,1,2.4375,0z" transform="matrix(1.41091, 0, 0, 1.41091, 41.7813, 26.6707)" stroke="#be7800" stroke-width="1" fill="#be7800"/>
  </g>
 <rect id="overlay" opacity="0" style="stroke-dasharray:none;" transform="matrix(0, -1, 1, 0, -32, 0)" fill-rule="evenodd" ry="4.1663" height="25" filter="url(#filter3630)" width="25" stroke="#F60" stroke-linecap="round" stroke-miterlimit="4" y="47.167" x="-70.116" stroke-width="1.2" fill="#e9c6af" class="overlayOnHover"/>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg2" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="29pt" width="29pt" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="13 43 29 29" xmlns:dc="http://purl.org/dc/elements/1.1/">
 <metadata id="metadata34">
  <rdf:RDF>
   <cc:Work rdf:about="">
    <dc:format>image/svg+xml</dc:format>
    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
    <dc:title/>
   </cc:Work>
  </rdf:RDF>
 </metadata>
 <defs id="defs6">
  <title id="title26">Layer 1</title>
  <title id="title22">Canvas 1</title>
  <filter id="filter001">
   <feGaussianBlur id="feGaussianBlur3632" stdDeviation="0.625"/>
  </filter>
 <linearGradient id="linearGradient001" y2="27.646" gradientUnits="userSpaceOnUse" x2="-45.8" y1="27.646" x1="-57.66">
   <stop id="stop1" stop-color="#ffffff" offset="0"/>
   <stop id="stop2" stop-color="#ffa0a0" offset="0.66462"/>
   <stop id="stop3" stop-color="#ffffff" offset="1"/>
  </linearGradient></defs>
 <rect id="iconBG" style="stroke-dasharray:none;" stroke-width="1.2" fill-rule="evenodd" ry="4.1663" transform="matrix(0, -1, 1, 0, 0, 0)" width="25" stroke="#696969" stroke-linecap="round" stroke-miterlimit="4" y="15.167" x="-70.116" height="25" fill="none"/>
 <rect id="iconFG" style="stroke-dasharray:none;" stroke-width="1.6" fill-rule="evenodd" ry="2.3755" transform="matrix(0, -1, 1, 0, 0, 0)" width="22" stroke="#e6e6e6" stroke-linecap="round" stroke-miterlimit="4" y="16.646" x="-68.6" height="22" fill="url(#linearGradient001)" opacity="0"/>
 <path id="iconSymbol" stroke-linejoin="miter" style="stroke-dasharray:none;" d="m21.411,59.069,3.5152,4.3939,9.7922-11.675" stroke="#4d4d4d" stroke-linecap="round" stroke-miterlimit="4" stroke-width="2.4000001" fill="none"/>
 <rect id="overlay" style="stroke-dasharray:none;" transform="matrix(0, -1, 1, 0, -32, 0)" fill-rule="evenodd" ry="4.1663" height="25" filter="url(#filter001)" width="25" stroke="#008000" stroke-linecap="round" stroke-miterlimit="4" y="47.167" x="-70.116" stroke-width="1.2" fill="#AFA" class="overlayOnHover" opacity="0"/>
</svg>
/*{{{*/
config.options.txtTheme = "MineralTheme";
config.options.chkSaveBackups= true;
config.options.txtBackupFolder= "backup";
//config.options.txtTheme="MiniBlog";
//config.options.txtTheme = "MiniSite";
//config.options.txtTheme = "Outline";
//config.options.chkHttpReadOnly = true;
//window.showBackstage = false; // show backstage too
config.options.chkShowQuickEdit=true;
config.macros.search.label="";
/*}}}*/
/*{{{*/
config.macros.RandomColorPaletteButton.text="farver"; 
config.macros.RandomColorPaletteButton.tooltip="Generér en tilfældig";
config.macros.RandomColorPalette.changedPaletteText ="Du har fået et nyt farveskema - vil du have et andet - klikker du igen";
config.options["chkBackstage"]=false; //SKJUL BAGSCENEN VED OPSTART
/*}}}*/